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

Java Android-如何在更改活动后保存复选框状态(选中/未选中),java,android,listview,checkbox,adapter,Java,Android,Listview,Checkbox,Adapter,我在StackOverflow中搜索了一下,但还没有找到正确的答案 我已经创建了一个列表视图(一个复选框的迭代+项目视图),并通过我的customAdapter(扩展了BaseAdapter)填充它 我有一个按钮,它获取值并通过Toast打印在屏幕上 到目前为止,一切顺利 下一步,我仍然在MainActivity中有按钮,但是ListView现在位于子活动中,我可以通过单击图像(ImageView放置在MainActivity中)来访问该子活动。我仍然可以勾选复选框,但我面临两个问题: 我仍然无

我在StackOverflow中搜索了一下,但还没有找到正确的答案

我已经创建了一个
列表视图
(一个
复选框的迭代
+
项目视图
),并通过我的customAdapter(扩展了BaseAdapter)填充它

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

到目前为止,一切顺利

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

  • 我仍然无法将值传递到
    main活动
    ,它们将在屏幕上打印(或操纵)
  • 只要我按下后退按钮返回到
    main活动
    并再次按下图像,选中的每个
    复选框
    都不再被选中(它们回到默认状态)
  • 我认为不需要这些代码,因为它来自标准实现(
    ListView
    -
    customAdapter
    ,带有
    ViewHolder
    实现,…),但万一需要,请告诉我


    提前多谢

    您可以将选中的复选框放入SharedReference中。然后将listview初始化代码移动到活动的
    onResume
    方法

    示例处理
    共享引用的类
    数据:

    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);
    
    为了保存项目

    我建议你在提醒对话框中而不是在祝酒词中展示它们。然后设置一个肯定按钮,从下面的代码中获取值并保存它们

    或者,如果直接从listview
    onClick保存值:

    mainList.setOnItemClickListener(new OnItemClickListener() {
              public void onItemClick(AdapterView<?> parent, View view,
                  int position, long id) {
               new DataHandler(getBaseContext()).setCheckedItem(position);              
              }
            });
    
    mainList.setOnItemClickListener(新的OnItemClickListener(){
    public void onItemClick(AdapterView父级、视图、,
    内部位置,长id){
    新的DataHandler(getBaseContext()).setCheckedItem(位置);
    }
    });
    
    就这样。我真的是编程新手(你可以看到我的StackOverFlow代表),但希望它能帮助你


    主要概念是:存储值→ 获取值→ 解析值→ 在UI上显示它。

    您好,谢谢您的回复。我无法将您的代码放入我的程序中。可能是我的错。我将为我的问题添加一些细节,我希望它能有所帮助。基本上,我不需要检索值(我已经为它创建了一个DataModel类),但问题是将这些值/对象从子活动传递到主活动。而且,我还需要保存复选框状态,如果我需要返回到子活动,则复选框将保持其状态(选中或未选中),直到应用程序关闭。