Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当用户退出应用程序并返回时,如何在Recyclerview中设置复选框?(Android Java)_Java_Android_Android Recyclerview_Sharedpreferences_Android Checkbox - Fatal编程技术网

当用户退出应用程序并返回时,如何在Recyclerview中设置复选框?(Android Java)

当用户退出应用程序并返回时,如何在Recyclerview中设置复选框?(Android Java),java,android,android-recyclerview,sharedpreferences,android-checkbox,Java,Android,Android Recyclerview,Sharedpreferences,Android Checkbox,我目前正在使用SharedReferences键、值对来保存状态,但似乎无法读取prefs文件并选中复选框 我已经写了这个自我解释的代码。但是,行列表.FindViewWholderForAdapterPositionI.itemView.performClick;中会抛出NullPointerException;。我只是想知道如何将Recyclerview列表中的复选框设置为选中并保存该状态。请帮忙 btnGetSelected.setOnClickListener(new View.OnCl

我目前正在使用SharedReferences键、值对来保存状态,但似乎无法读取prefs文件并选中复选框

我已经写了这个自我解释的代码。但是,行列表.FindViewWholderForAdapterPositionI.itemView.performClick;中会抛出NullPointerException;。我只是想知道如何将Recyclerview列表中的复选框设置为选中并保存该状态。请帮忙

btnGetSelected.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        StringBuilder stringBuilder = new StringBuilder();
        for (Number number : numbers) {
            if (number.isSelected()) {
                if (stringBuilder.length() > 0)
                    stringBuilder.append(", ");
                stringBuilder.append(number.getTextONEs());
                Log.e("Checked", "here");
                setPreference(getApplicationContext(), "1", number.getONEs());
            } else {
                Log.e("Not checked", "here");
                setPreference(getApplicationContext(), "0", number.getONEs());
            }
        }
    }
});
try {
    for (int i = 0; i < tocArray.length; i++) {
        String value = getPreference(getApplicationContext(),Integer.toString(i));
        if (value.equalsIgnoreCase("1")) {
            list.findViewHolderForAdapterPosition(i).itemView.performClick();
        } else {
            //Do Nothing
        }
    }
} catch (Exception e) {
    e.printStackTrace();
}
你也能解释一下recyclerview和cards的整个概念以及为什么需要持卡人吗?谢谢请帮忙!
请尝试将以下方法添加到您的活动中:

private void restoreSelectedPositions(){
    SharedPreferences preferences = getSharedPreferences("selected_pos", MODE_PRIVATE);
    int tmpTotal = preferences.getInt("total_pos", 0);
    if(tmpTotal == numbers.size()){
        for(int i=0; i<tmpTotal; i++{
            boolean tmpFlag = preferences.getBoolean("pos" + i, false);
            numbers.get(i).setSelected(tmpFlag);
        }
    }else{
        // Saved data size not match with existing data.
    }
}

private void saveSelectedPositions(){
    SharedPreferences preferences = getSharedPreferences("selected_pos", MODE_PRIVATE);
    SharedPreferences.Editor editor = preferences.edit();
    editor.clear();
    editor.putInt("total_pos", numbers.size());
    for(int i=0; i<numbers.size(); i++){
        editor.putBoolean("pos" + i, numbers.get(i).isSelected());
    }
    editor.commit();
}
@Override
protected void onResume() {
    super.onResume();
    restoreSelectedPositions();
    // Change the line below.
    Your RecyclerViewAdapter.notifyDataSetChanged();
}

当您需要保存时,只需拨打saveSelectedPositions。希望这有帮助

数字在哪里?这不重要。它使用代码中显示的方法返回字符串。我的问题是,如何保存这些框的状态,并在用户返回活动时检查它们。为什么要进行向下投票?这是一个非常好的问题,在StackOverflow上找不到解决方案。
@Override
protected void onResume() {
    super.onResume();
    restoreSelectedPositions();
    // Change the line below.
    Your RecyclerViewAdapter.notifyDataSetChanged();
}