单击保存数据按钮后如何在共享的首选项中保存复选框状态

时间:2019-08-11 20:43:13

标签: java list android-studio checkbox sharedpreferences

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

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

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

在主要活动的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<>();
    }
}

1 个答案:

答案 0 :(得分: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是打开还是关闭,然后根据开关状态设置开关。