簡體   English   中英

如何在onclick中刷新listadapter

[英]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.addadapter.remove類的方法對ArrayAdapter本身進行更改,然后調用adapter.notifyDataSetChanged() 在您的情況下,您將調用adapter.clear()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM