Список Android с MatrixCursor не обновляется - futureTask - PullRequest
0 голосов
/ 16 ноября 2011

Я пишу простой клиент xmpp в Android, и у меня проблема с обновлением contactList. Я использую MatrixCursor с SimpleCursorAdapter, чтобы сделать это. Когда программа обновляет список, она запускает поток futureTask. Данные в порядке, но список на экране не обновляется, потому что (я думаю) поток этого 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 Ответ

1 голос
/ 03 декабря 2011

Я нашел решение. Я использую обработчик для вызова этого метода. Работает отлично :)

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);
   }
});
...