[英]How to refresh a listadapter from within an onclick
我有一個Android應用程序,該應用程序使用ListView顯示列表,並且有一個操作欄按鈕可清除所述列表。 我決定添加一個確認對話框,以便人們不會意外刪除所有條目,而我遇到了問題。 如果我在對話框中的“是”按鈕的onclick內使用setListAdapter,它將無法編譯。 如果我在onclick之外使用它,它將起作用,但直到用戶退出活動並返回活動列表后,它才刷新列表,這顯然是不合適的。 這是我的方法,當按下“清除列表”操作欄按鈕時會被調用,其中包含內部按鈕的相關onclick。 我有種感覺,我不應該在setListAdapter中使用“ this”,因為有了對話框,它不再對應於我認為的listview活動? 但是我不確定該放些什么。
public void clearTrigger(MenuItem item) {
//Set up a dialog with two buttons to verify that the user really wants to delete
everything
confirm = new Dialog(display.this);
confirm.setContentView(R.layout.conf);
confirm.setTitle("Confirm deletion");
yes = (Button)confirm.findViewById(R.id.yes);
//If the user says yes, then delete everything
yes.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Remove everything from Hours.
Hours.clear();
String tempH = " ";
String tempW = " ";
//Then save it again in it's new, empty state so that it doesn't reappear the next time the app is run.
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
SharedPreferences.Editor edit = prefs.edit();
edit.putString("SAVEDATA", TextUtils.join(",", Hours));
edit.remove("totalh");
edit.remove("totalw");
edit.commit();
//And finally... refresh the list view - doesn't work
setListAdapter(new ArrayAdapter<String>(this, R.layout.activity_list, R.id.listText, Hours));
confirm.dismiss();
}
});
confirm.show();
}
ArrayAdapter
構造函數的第一個參數是Context
,因此您需要將Activity傳遞給它,例如new ArrayAdapter<String>(MyActivity.this, ...)
。 現在,您正在向它傳遞您的OnClickListener
實例,這就是為什么它會導致編譯器錯誤。
但是更新ListView的最好方法是使用adapter.add
和adapter.remove
類的方法對ArrayAdapter本身進行更改,然后調用adapter.notifyDataSetChanged()
。 在您的情況下,您將調用adapter.clear()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.