2011-11-16 2 views
0

Android에서 간단한 xmpp 클라이언트를 작성 중이며 업데이트가 contactList 인 경우 문제가 있습니다. 나는 MatrixCursor을 사용하여 SimpleCursorAdapter을 사용하고 있습니다. prog 업데이트 목록이 futureTask의 스레드를 시작합니다. 데이터는 괜찮지 만,이 futureTask의 스레드가 실행을 기다리고 있기 때문에 화면의 목록이 새로 고쳐지지 않습니다.MatrixCursor로 Android의 listView가 업데이트되지 않습니다. futureTask

drawContactList 연락처 변경 상태가되면 하나의 수신기에서 메서드가 호출됩니다. 예를 들어 main에 대한 호출을 복사하면 완벽하게 작동합니다.

어떻게 고칠 수 있습니까?

코드 :

static ListView contactList; 
static MatrixCursor clCursor; 
static SimpleCursorAdapter adapterList; 

private final String[] matrixCols = new String[] { "_id", "username", "description", "icon" }; 
private final String[] menuCols = new String[] {"username", "description", "icon" }; 
private final int[] toWhatId = new int[] { R.id.clUsername, R.id.clDescription, R.id.clStatusIcon }; 

... 
public void drawContactList(ArrayList<Contact> contacts, Context context) { 

    clCursor = new MatrixCursor(matrixCols); 

    startManagingCursor(clCursor); 
    if(contacts != null){ 
     for (Contact contact : contacts) {   
      clCursor.addRow(new Object[] { contact.id, contact.name, contact.description, contact.icon }); 
     } 
    } 
    adapterList = new SimpleCursorAdapter(getApplicationContext(), R.layout.contactlist, clCursor, menuCols, toWhatId); 
    //in this line futureTask starts 

    contactList.setAdapter(adapterList); 
} 

답변

1

나는 해결책을 발견했다. 이 메소드를 호출하기 위해 Handler를 사용한다. 완벽하게 작동합니다.

private Handler contactListHandler = new Handler(); 

contactListHandler.post(new Runnable() { 
    public void run() { 
     System.out.println("Presence changed: " + presence.getFrom() + " " + presence); 
     drawContactList(xmppConnection.updateContacts(presence), context); 
    } 
});