2011-11-16 15 views
0

私はアンドロイドで簡単なxmppクライアントを作成していますが、私はアップデートcontactListに問題があります。私はMatrixCursorSimpleCursorAdapterを使っています。 progがリストを更新するとfutureTaskのスレッドが開始されます。データは大丈夫ですが、このfutureTaskのスレッドが実行を待っているので(考えているので)画面上のリストは更新されません。MatrixCursorを使ったAndroidのlistViewは更新されません - futureTask

drawContactList連絡先が変更されたときに、1つのリスナーからメソッドが呼び出されます。たとえば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

私は解決策を見つけました。私はこのメソッドを呼び出すためにハンドラを使用しています。それは完全に動作します:)

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); 
    } 
}); 
関連する問題