2011-08-03 106 views
0

的內容我有我的activity一個ListView初步設定一些Adapter。然後,點擊某個按鈕之後,我只需撥打listView.setAdapter(new DifferentAdapter(this, foo));更改我的適配器

似乎只是正常工作在第一。用戶界面已更新,一切正常。然後最終,它崩潰和日誌顯示我:

E/AndroidRuntime(29724): java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. [in ListView(2, class android.widget.ListView) with Adapter(class android.widget.HeaderViewListAdapter)] 

我猜它不是那麼簡單,只調用setAdapter()只要你想。我需要notifyDataSetChanged什麼嗎?如果有問題,我不使用ListActivity

編輯

從下面澄清:這是非常簡單的。我的Activity中有兩個內部類,每個類都擴展了BaseAdapter。所以,我有兩個不同的適配器,在某些時候,我只是想切換ListView控件使用不同的適配器。

+1

您是否使用線程或在的AsyncTask您的活動,並在後臺您要setAdapter? – sat

+0

@sat。不,它非常簡單。我的Activity中有兩個內部類,每個類都擴展了BaseAdapter。所以,我有兩個不同的適配器,在某些時候,我只是想切換ListView控件使用不同的適配器。 – LuxuryMode

+0

切換點可能很重要。在第二次設置適配器之前,請使用notifyDataSetChanged(),然後設置Adapter。 – sat

回答

0

顯然,這工作得很好:

listView.setVisibility(View.GONE); 
listView.setAdapter(new MyAdapter(MyActivity.this, mList)); 
listView.setVisibility(View.VISIBLE); 
+0

創建新的適配器是非常糟糕的指示 –