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

标签 java android listview checkbox adapter

我已经在 StackOverflow 中进行了搜索,但尚未找到正确的答案。

我创建了一个ListView(checkbox + itemview的迭代)并通过我的customAdapter(它扩展了BaseAdapter )。

我有一个按钮,可以获取值并通过 Toast 将其打印在屏幕上。

到目前为止,一切顺利。

下一步,我在 MainActivity 中仍然有该按钮,但是 ListView 现在位于我通过单击图像 (ImageView 放置在 MainActivity 中)。我仍然可以选中复选框,但面临两个问题:

  1. 我仍然无法将值传递到 MainActivity,它们将在屏幕上打印(或操作)
  2. 一旦我按后退按钮返回到 MainActivity 并再次按图像,每个已选中的 CheckBox 就不再被选中(它们来自回到默认状态)

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

提前非常感谢!

最佳答案

您可以将选中的复选框放入共享首选项中。然后将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/

相关文章:

c# - ListView 中的空间超出了我的需要

c# - Xamarin - 清除 ListView 选择

android - 屏幕锁定和解锁时游戏卡住

android - 如何根据其他微调器获得微调器值

java - 执行某些代码时,我在 android studio 中的应用程序崩溃

android - 如何将 RSS 提要加载到 ListView 中?

java - Spring Boot ERP系统最佳删除操作策略

java - 邮政编码的 ReGex

java - 对象的内存大小(字节)

java - 这个程序实际上是如何运作的?