2011-11-16 1 views
0

Я пишу простой клиент xmpp в android, и у меня есть проблема с обновлением contactList. Im используя MatrixCursor с SimpleCursorAdapter для этого. Когда обновляется список обновлений Prog, он запускает поток futureTask. Данные в порядке, но список на экране не обновляется, потому что (я думаю) этот поток futureTask ждет выполнения?Список Android Android с MatrixCursor не обновляется - futureTask

drawContactList метод вызывается из одного слушателя при любом изменении состояния контакта. Например, когда я копирую вызов на главную, он отлично работает.

Любая идея, как исправить это?

Код:

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

Я нашел решение. Im использует 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); 
    } 
});