Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从onclick中刷新listadapter_Java_Android - Fatal编程技术网

Java 如何从onclick中刷新listadapter

Java 如何从onclick中刷新listadapter,java,android,Java,Android,我有一个Android应用程序,它使用ListView显示列表,并且有一个操作栏按钮来清除所述列表。我决定添加一个确认对话框,这样人们就不会意外地删除他们的所有条目,我遇到了问题。如果我在onclick中为对话框中的“yes”按钮使用setListAdapter,它将不会编译。如果我在onclick之外使用它,它会工作,但不会刷新列表,直到用户退出活动并返回到它,这显然是不合适的。下面是我的方法,当按下“clear list”操作栏按钮时会调用该方法,其中包含内部按钮的相关onclick。 我觉

我有一个Android应用程序,它使用ListView显示列表,并且有一个操作栏按钮来清除所述列表。我决定添加一个确认对话框,这样人们就不会意外地删除他们的所有条目,我遇到了问题。如果我在onclick中为对话框中的“yes”按钮使用setListAdapter,它将不会编译。如果我在onclick之外使用它,它会工作,但不会刷新列表,直到用户退出活动并返回到它,这显然是不合适的。下面是我的方法,当按下“clear list”操作栏按钮时会调用该方法,其中包含内部按钮的相关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();
}
public void clearTrigger(菜单项){
//设置一个带有两个按钮的对话框,以验证用户是否确实想要删除
一切
确认=新建对话框(显示此对话框);
confirm.setContentView(R.layout.conf);
确认。设置标题(“确认删除”);
yes=(按钮)confirm.findViewById(R.id.yes);
//如果用户说是,则删除所有内容
yes.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
//把所有的东西从几个小时内移走。
小时;
字符串tempH=“”;
字符串tempW=“”;
//然后将其再次保存为新的空状态,以便下次运行应用程序时不会再次出现。
SharedReferences prefs=PreferenceManager.GetDefaultSharedReferences(getBaseContext());
SharedReferences.Editor edit=prefs.edit();
edit.putString(“SAVEDATA”,TextUtils.join(“,”,Hours));
编辑。删除(“totalh”);
编辑。删除(“totalw”);
edit.commit();
//最后…刷新列表视图-不起作用
setListAdapter(新的ArrayAdapter(this,R.layout.activity_list,R.id.listText,Hours));
确认。驳回();
}
});
confirm.show();
}

构造函数
ArrayAdapter
的第一个参数是
上下文
,因此您需要将活动传递给它,类似于
新建ArrayAdapter(MyActivity.this,…)
。现在,您正在将
OnClickListener
的实例传递给它,这就是它给出编译器错误的原因


但更新列表视图的最佳方法是使用
适配器。添加
适配器。删除
,然后调用
适配器。notifyDataSetChanged()
,对阵列适配器本身进行更改。在您的情况下,您可以调用
adapter.clear()

使用listview的notifydatachanged(),而不是重新设置setlistadapter。感谢您的回答!我最终在setListAdapter中使用了MyActivity.this(我可以发誓我在问这个问题之前试过了……无论如何),但我会研究使用adapter.clear()和那种方法,并在找到答案后切换到那种方法。