Android - 如何在更改活动后保存复选框状态(已选中/未选中)

时间:2017-08-20 13:19:49

标签: java android listview checkbox adapter

我搜索了StackOverflow,但还没找到合适的答案。

我创建了ListViewcheckbox + itemview的迭代)并通过我的customAdapter(扩展 BaseAdapter )填充它。

我有一个按钮,它取值并通过Toast在屏幕上打印。

到目前为止,非常好。

下一步,我仍然在MainActivity中有一个按钮,但ListView现在处于我通过点击{ImageView放置在{{MainActivity的儿童活动中1}})。我仍然可以查看复选框,但我面临两个问题:

  1. 我仍然无法将值传递给MainActivity,它们将在屏幕上打印(或操作)
  2. 当我按下后退按钮返回MainActivity并再次按下图像时,不再检查已检查的每个CheckBox(它们恢复到默认状态)< / LI>

    我认为不需要代码,因为它来自标准实施(ListView - customAdapterViewHolder实施,...),但万一请告诉我。

    提前多多感谢!

1 个答案:

答案 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上显示。