0

私は多くのチェックボックスを表示するアンドロイドのビューを持っています。それらはすべて動的に追加され、それぞれにテキストを部分的に設定します。

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        LinearLayout layout = (LinearLayout) findViewById(R.id.layout);
        LayoutInflater inflater = getLayoutInflater();

        for (String string : getResources().getStringArray(R.array.string_array)) { 
            LinearLayout searchField = (LinearLayout) inflater.inflate(R.layout.cb, null);

            CheckBox checkBox = (CheckBox) searchField.findViewById(R.id.checkBox1);
            checkBox.setText(string);
            layout.addView(searchField, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
        }
    }
}

コードからわかるように、文字列の配列があり、配列内の文字列ごとにチェック ボックスを追加します。ビューが最初に表示されたとき、すべてのチェック ボックスに正しいテキストが表示されますが、デバイスを横向きまたは縦向きモードに回転させた後、すべてのチェック ボックスに (最後のチェック ボックスから) 同じテキストが表示されます。(画面を再描画するための) 回転は、テキストには影響しません。それらはすべて、最後のチェック ボックスのテキストと共に残ります。

デバッガーを調べましたが、チェック ボックス オブジェクトは文字列ごとに新しいものであるため、オブジェクトの同じインスタンスを操作していません。私は現在アイデアがありません。

なぜこれが起こっているのか分かりますか?

4

1 に答える 1

0

画面を回転すると、ランタイム Resource が変更され、Activity が再起動されます。問題を解決する 2 つの方法:

  1. すべてのチェックボックスの値を に保持し、OnCheckedChangeListenerにリセットしますonResume
  2. https://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChangeonConfigurationChangedに従って、自分で処理します
于 2013-01-10T12:52:36.087 に答える