[英]Array Adapter notifyDataSetChanged() will not work
我在這個上浪費了太多時間,所以不得不再問一次。 我不知道為什么會發生這種情況。
我有一個數組適配器(aAdapter)和一個數組列表(aList),我試圖用一個清除按鈕來清除數據庫中的條目並清除列表。
我的問題是NotifyDataSetChanged()只是在我的onlick方法中不起作用:
public void clearDB(View view) {
aList.clear();
aAdapter.notifyDataSetChanged();
HighScoresDB hsdb = new HighScoresDB(HighScoresActivity.this);
hsdb.openDB();
hsdb.clearDB();
hsdb.closeDB();
}
它適用於其他任何地方。 我甚至嘗試將clear和notifyDataSetChanged()放在另一個方法中並調用它但是這也不起作用但是當我從onCreate調用它時它確實有效....
有任何想法嗎?
ps正在清除數據庫。
首先,我發現Android適配器實現存在很大缺陷。 當談到執行任何定制時,似乎有關於如何使用它的模糊描述,官方文檔沒有澄清其中任何一個。 我很高興被證明是錯的。
在視圖中編輯數據時,我獲得一致結果的方式如下:
所呈現的基礎數據結構的所有更改都應該在AsyncTask中完成,這在您更改UI線程上的內容並且不希望出現並發問題時是有意義的。
底層數據結構的操作應該通過調用適配器方法來執行,所以如果你有一個ListAdapter
那么你可以使用add
, remove
和clear
列表適配器。 這意味着適配器管理視圖通知等。這通常導致必須創建自定義適配器,因為可用的方法是有限的(在7之前甚至沒有添加所有sdk版本)。 最后你的適配器充當了一個大胖控制器 ,雖然我知道我們不應該將android視為MVC模式,但它似乎仍然是錯誤的。
我已經創建了應用程序,我繞過適配器調用來操作底層數據結構,它已經完成所有結果,最終變得不可預測,除非你嚴格管理通知到視圖。 現在我只需通過適配器調用。
所以雖然我無法解釋為什么notifiyDataSetChanged
在你的onClick
方法中不起作用。 我希望提供有用的信息,可以幫助您使應用程序按預期工作。
雖然不漂亮,但您可以重新初始化適配器而不是通知它,我已經看到有時它是使其工作的唯一方法。
因此,我處理類似問題的一種方法是基本上重新初始化適配器,就像blindstuff所說的那樣。
public class Example extends Activity{
CustomAdapter adapter;
ArrayList<ArrayList<String>> info = new ArrayList<ArrayList<String>>();
final ListView list = (ListView) findViewById(R.id.listView_custom);
adapter = new CustomAdapter(this, diceInfo.get(id));
list.setAdapter(adapter);
然后在onclick Listener中
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
info.get(id).add("1,0,0,true");
adapter = new CustomAdapter(Example.this, info.get(id));
list.setAdapter(adapter);
}
});
該示例沒有初始化所有內容,但它已達到目的。 我只是創建一個新的適配器並將其設置為我的列表視圖。 效果很好。
當在對話框中使用時,還遇到了適配器的奇怪行為。 一旦適配器更新(或底層結構 - 兩種方式)和notifiyDataSetChanged對話框消失,沒有錯誤或LogCat中的其他跟蹤或Eclipse的調試。 完全相同的代碼,一旦適配器應用於正常活動(ListView)工作正常。
我想這個帖子不再有效了,但是為了將來的參考:
[onNotifyDataSetChanged()]通知附加的觀察者基礎數據已被更改,反映數據集的任何視圖都應自行刷新。
不要讓Adapter告訴View刷新自己,只需使用adapter.clear()和adapter.add()更新數據,然后再次通過調用listView.setAdapter(adapter)強制ListView更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.