我已经在 StackOverflow 中进行了搜索,但尚未找到正确的答案。
我创建了一个ListView
(checkbox
+ itemview
的迭代)并通过我的customAdapter(它扩展了BaseAdapter )。
我有一个按钮,可以获取值并通过 Toast 将其打印在屏幕上。
到目前为止,一切顺利。
下一步,我在 MainActivity
中仍然有该按钮,但是 ListView
现在位于我通过单击图像 (ImageView
放置在 MainActivity
中)。我仍然可以选中复选框,但面临两个问题:
- 我仍然无法将值传递到
MainActivity
,它们将在屏幕上打印(或操作) - 一旦我按后退按钮返回到
MainActivity
并再次按图像,每个已选中的CheckBox
就不再被选中(它们来自回到默认状态)
我认为不需要代码,因为它来自标准实现(ListView
- customAdapter
和 ViewHolder
实现,. ..),但以防万一请告诉我。
提前非常感谢!
最佳答案
您可以将选中的复选框放入共享首选项中。然后将listview初始化代码移至Activity的onResume
方法中。
示例处理sharedpreferences
数据的类:
class DataHandler {
private final SharedPreferences dataStore;
DataHandler(Context mContext) {
dataStore = mContext.getSharedPreferences("appname", Context.MODE_PRIVATE);
}
int which() {
return dataStore.getInt("some_key",0);
}
void setCheckedItem(int itemwhat) {
dataStore.edit().putInt("some_key",itemwhat).apply();
}
}
对于多个值,您可以将它们放入数组中,然后使用 toString() 方法将它们转换为字符串并保存。并且,获取值:
String x = "2,3,4,5"; //assume
String[] y = new String[]{x};
int checkablepositions = Integer.parseInt(y[0]); // y[0]....y[y.length-1]
现在,在 MainActivity 的 onResume()
中,假设您已将 ListView 初始化为“mainList”。
CheckBox x1y2z3 = (CheckBox)mainList.getChildAt(new DataHandler(getBaseContext).which());
x1y2z3.setChecked(true);
对于保存项目,
我建议您在警报对话框中显示它们而不是在 Toast 中。然后设置一个“肯定”按钮以从下面的代码中获取值并保存它们。
或者,如果您直接保存 ListView 中的值onClick
:
mainList.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
new DataHandler(getBaseContext()).setCheckedItem(position);
}
});
就是这样。我在编程方面确实很陌生(正如您可以看到我的 StackOverFlow 代表),但希望它能够对您有所帮助。
主要概念是:存储值→获取值→解析值→将其显示在UI上。
关于java - Android - 如何在更改 Activity 后保存复选框状态(选中/未选中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45782593/