如何存储和访问共享首选项中的单选按钮?

时间:2016-07-08 01:58:01

标签: android radio-button

关于在共享首选项中保存单选按钮状态有很多问题,但没有一个提供我正在寻找的解决方案。

我在for循环中的每个广播组内创建了15个广播组和4个单选按钮。无线电组的唯一ID为1到15,单选按钮的ID为100到159。

这是我用来保存单选按钮id的代码:

public void saveArray(int[] array, String arrayName) {
    SharedPreferences prefs = getActivity().getSharedPreferences("preferencename", 0);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putInt(arrayName +"_size", array.length);
    for(int i=0;i<array.length;i++) {
        editor.putInt(arrayName + "_" + i, array[i]);
    }
    editor.commit();
}

array包含所有检查过的单选按钮的唯一ID,并且我已对上述代码进行了测试,它运行正常,但问题是我无法访问它。

这是我用来检索单选按钮ID的代码:

public void loadArray(String arrayName, Context mContext) {
    SharedPreferences prefs = mContext.getSharedPreferences("preferencename", 0);
    int size = prefs.getInt(arrayName + "_size", 0);
    int array[] = new int[size];
    for(int i=0;i<size;i++) {
        array[i] = prefs.getInt(arrayName + "_" + i, 0);

    }
}

saveArray一样,loadArray也有效。该数组由正确的单选按钮ID填充。 问题现在开始了 - 我无法访问这些单选按钮,我无法findViewById(),因为这只能在onCreateView()中找到

所以这在loadArray

中不起作用
    for(int i=0; i<size; i++) {
        RadioButton radio1 = (RadioButton) findViewById(array[i]);
    }

findViewById的可能解决方案是将视图存储在onCreateView()中,然后再访问它。所以我创建了一个单选按钮数组

RadioButton[] allRadio = new RadioButton[15];

现在在onCheckedChanged内,我将所选的单选按钮添加到数组中:

public void onCheckedChanged(RadioGroup radioGroup, int i) {
        RadioButton radio = (RadioButton) rootView.findViewById(i);
        String selectedValue = radio.getText().toString();
        allRadio[radioGroup.getId()-1] = radio;
}

上面的代码完美地存储了阵列中的单选按钮,但现在我无法保存它们!您可以在共享首选项中存储int,string等..但不能存储单选按钮!解决方案可能是存储单选按钮ID,但同样的问题将重新开始findViewById()不可用。

1 个答案:

答案 0 :(得分:0)

public void loadArray(String arrayName, Context mContext) {
    SharedPreferences prefs = mContext.getSharedPreferences("preferencename", 0);
    int size = prefs.getInt(arrayName + "_size", 0);
    int array[] = new int[size];
    for(int i=0;i<size;i++) {
        array[i] = prefs.getInt(arrayName + "_" + i, 0);
//->put Toast here and check whether your are getting the id's or not. If you
//->are getting it, return arrays of id back to calling method
    }
}