有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我已经设置了共享首选项,以便在我的应用程序中单击“保存数据”按钮后存储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();
        }
    });

以下是我在主活动(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) 个答案

  1. # 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是打开还是关闭,然后根据开关状态设置开关