0

我有一个测验应用程序,它将多项选择题(下面TextView有 5 个选项)显示为 a中的RadioButtons片段。FragmentStatePagerAdapterViewPager

我得到的错误仅在片段恢复时出现。向前滑动,它会完美地加载每个问题和所有 5 个选项。然而,当它恢复时,它加载完全错误,所有 5RadioButtons显示相同的文本,特别是最后一个RadioButton。我无法弄清楚为什么会发生此错误,但是我认为这可能与调用超类有关,但这只是一种预感。

这是代码:

OnCreateView正确设置由 logcat 确定的文本:

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;

然后这是我的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
    }
}

如果您需要来自 OnCreateView 的更多代码或其他任何内容,请告诉我。我似乎无法找出导致此问题的原因,非常感谢您的帮助!

4

1 回答 1

2

您的每个单选按钮都应该有一个不同的 id,而不是它们都具有相同的 id。这就是单选按钮和其他视图通过 id 保存状态的方式。好吧,更准确地说,他们将状态保存在由其 id 映射的 SparseArray 中。因此,为什么他们都拥有第 5 个恢复的信息。

于 2013-02-19T19:50:37.093 回答