我有一个测验应用,可以在TextView
内的RadioButtons
中显示多个选择题(FragmentStatePagerAdapter
,其中ViewPager
为RadioButtons
作为选项)作为片段。
我得到的错误只有在片段恢复时才会出现。向前轻拂,它可以完美地加载每个问题和所有5个选项。但是,在恢复时,如果所有5 RadioButton
显示相同的文本,特别是最后OnCreateView
的文本,则加载完全错误。我无法弄清楚为什么会出现这种错误但是我认为这可能与调用超级类有关,但这只是一种预感。
以下是代码:
for (String s : aArray) {
// Runs through a string array of the 5 answers
LinearLayout l = lArray.get(pos);
RadioButton r = (RadioButton) l.findViewById(R.id.radio);
Log.d(s, correctanswer);
//Log tag shows that the choices during initial creation or **restore** are the different 5 answers
r.setText(s);
}
return rootView;
正确设置文本,由logcat确定:
OnViewStateRestored
然后这是我的public void onViewStateRestored(Bundle savedInstanceState) {
super.onViewStateRestored(savedInstanceState);
for (LinearLayout l : lArray) {
RadioButton r = (RadioButton) l.findViewById(R.id.radio);
Log.e(r.getText().toString(), correctanswer);
//Suddenly the displayed text is the same for all 5 buttons
if (r.isChecked())
r.performClick();
//android automatically saves check status. for full restore I click all the buttons
}
}
:
{{1}}
如果您需要更多来自OnCreateView的代码或其他任何内容,请与我们联系。我似乎无法解决造成这个问题的原因,并且非常感谢您的帮助!
答案 0 :(得分:2)
每个单选按钮应具有不同的ID,而不是它们都具有相同的ID。这就是单选按钮和其他视图通过id保存状态的方式。好吧,为了更准确,他们将状态保存在由他们的id映射的SparseArray中。因此,为什么他们都有恢复的第五个信息。