【问题标题】:How do you save checkbox state in shared preferences after save data button is clicked单击保存数据按钮后,如何在共享首选项中保存复选框状态
【发布时间】:2019-12-18 13:51:55
【问题描述】:

我已设置共享首选项以在我的应用程序中单击保存数据按钮后存储 ArrayList 的值。这部分工作正常。

我遇到的麻烦是我有一个 recyclerview 适配器,它用行填充 recyclerview。每一行都包含一个复选框,选中该复选框时,该行中的文本会变为绿色,表示它已完成。

我的问题是如何将复选框状态添加到我的共享首选项并保存该状态,以便在我重新打开应用程序时保存复选框。

在主Activity的oncreate中保存按钮

    //Functionality for save button
    final Button saveButton =findViewById(R.id.saveButtonGame);
    saveButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            saveData();
        }
    });

这是我在 Main Activity(oncreate 之外)中用于保存 arraylist 的共享首选项的代码。如何实现我的复选框状态?

//Save data when save button is clicked
private void saveData(){
    SharedPreferences sharedPreferences = getSharedPreferences("shared preferences", MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    Gson gson = new Gson();
    String json = gson.toJson(gameList);
    editor.putString("game list", json);
    editor.apply();
}

//Load data on app start up
private void loadData(){
    SharedPreferences sharedPreferences = getSharedPreferences("shared preferences", MODE_PRIVATE);
    Gson gson = new Gson();
    String json = sharedPreferences.getString("game list", null);
    Type type = new TypeToken<ArrayList<String>>() {}.getType();
    gameList = gson.fromJson(json, type);

    if(gameList == null){
        gameList = new ArrayList<>();
    }
}

【问题讨论】:

    标签: java list android-studio checkbox sharedpreferences


    【解决方案1】:

    您可以为“开”和“关”状态创建三个整数,并创建一个用于保持开关值打开或关闭。我就是这样做的。

    int reminderState;
    int REMINDER_ON = 1;
    int REMINDER_OFF = 0;
    
    switch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
                if (isChecked) {
                    reminderState = REMINDER_ON;                     
    
                } else {
                    reminderState = REMINDER_OFF;
                }
            }
        });
    

    因此,在您的 saveData() 方法中,您将 reminderSate 值存储在您的共享首选项中。

    loadData() 中检查reminderState 是打开还是关闭,然后根据开关状态设置开关。

    【讨论】:

    • 您好,感谢您的评论。我现在坚持的是我的主要活动中有我的按钮,但我需要将数据保存在 recyclerview 适配器中,因为我无法访问我的主要活动中的复选框,因为它是在适配器类中声明的。
    • 并没有真正改变任何东西。您只需在适配器类中声明复选框,然后在 onCheckChanged 中,存储复选框的状态。尝试关注This tutorialThisThis 以获得更好的理解。希望我对您有所帮助。
    猜你喜欢
    • 2016-06-06
    • 2012-11-29
    • 1970-01-01
    • 1970-01-01
    • 2020-11-12
    • 1970-01-01
    • 2019-01-20
    • 2019-10-27
    • 2016-12-26
    相关资源
    最近更新 更多