gpt4 book ai didi

java - 如何从 onclick 中刷新列表适配器

转载 作者:行者123 更新时间:2023-12-01 12:56:36 25 4
gpt4 key购买 nike

我有一个 Android 应用程序,它使用 ListView 显示列表,并且有一个操作栏按钮可以清除所述列表。我决定添加一个确认对话框,这样人们就不会意外删除所有条目,而我遇到了问题。如果我在对话框中的"is"按钮的 onclick 中使用 setListAdapter,它将无法编译。如果我在 onclick 之外使用它,它会工作,但不会刷新列表,直到用户退出 Activity 并返回到它,出于明显的原因,这是不合适的。这是我的方法,当按下“清除列表”操作栏按钮时会调用该方法,其中包含内部按钮的相关 onclick。我有一种感觉,我不应该在 setListAdapter 中使用“this”,因为在对话框中,这不再对应于我认为的 ListView Activity ?但我不知道该放什么来代替。

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 等方法对 ArrayAdapter 本身进行更改和adapter.remove ,然后调用adapter.notifyDataSetChanged() 。就您而言,您可以调用 adapter.clear() .

关于java - 如何从 onclick 中刷新列表适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23835386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com