我搜索了StackOverflow,但还没找到合适的答案。
我创建了ListView
(checkbox
+ itemview
的迭代)并通过我的customAdapter(扩展 BaseAdapter )填充它。
我有一个按钮,它取值并通过Toast在屏幕上打印。
到目前为止,非常好。
下一步,我仍然在MainActivity
中有一个按钮,但ListView
现在处于我通过点击{ImageView
放置在{{MainActivity
的儿童活动中1}})。我仍然可以查看复选框,但我面临两个问题:
MainActivity
,它们将在屏幕上打印(或操作)MainActivity
并再次按下图像时,不再检查已检查的每个CheckBox
(它们恢复到默认状态)< / LI>
醇>
我认为不需要代码,因为它来自标准实施(ListView
- customAdapter
,ViewHolder
实施,...),但万一请告诉我。
提前多多感谢!
答案 0 :(得分:1)
您可以将选中的复选框放入共享首选项中。然后将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上显示。