关于在共享首选项中保存单选按钮状态有很多问题,但没有一个提供我正在寻找的解决方案。
我在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()
不可用。
答案 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
}
}