0

複数の選択肢の質問 (以下の選択肢としてTextView5 つ) を内のRadioButtonsフラグメントとして表示するクイズ アプリがあります。FragmentStatePagerAdapterViewPager

私が得ているエラーは、フラグメントが復元されたときだけです。前方にフリックすると、各質問と 5 つの選択肢すべてが完全に読み込まれます。ただし、復元中は完全に間違ってロードされ、5つすべてRadioButtonsが同じテキスト、特に最後のRadioButton. このエラーが発生する理由はわかりませんが、スーパークラスへの呼び出しに関係しているのではないかと考えていますが、これは単なる推測です。

コードは次のとおりです。

OnCreateViewlogcat によって決定されたテキストを正しく設定します。

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 に答える