7

@+id/radioButton12 つの RadioButton、idおよびを持つ 1 つの RadioGroup を持つカスタム コンポーネントがあり@+id/radioButton2ます。一方、5 つのタブを持つ TabActivity があります。各タブで、このコンポーネントは複数回使用されています。

ここに問題があります。向きが変わり、アクティビティが再作成されると、RadioButton のすべてが同じ属性で読み込まれます。これにはandroid:textandroid:margin作成したスタイル設定された属性も含まれます。同じ ID を持つすべての CheckBox でも発生します。

なぜこれが起こっているのかを突き止めるのにしばらく時間を費やし、Android が onRestoreInstanceState でそれを行っていると結論付けました。スーパーメソッドを呼び出す行にコメントを付けると、正常に動作します。

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    // super.onRestoreInstanceState(savedInstanceState);

}

これが本来あるべき姿ですか?または、これを引き起こすために何ができますか?

カスタムビューが作成されると、同じIDを持つ同じビューで同じレイアウトを膨らませるため、これは通常の動作ではないと推測しています。そのため、毎回子に異なる ID を生成する新しいカスタム ビューをインスタンス化することはできません。上記またはandroid:configChangesマニフェストでコードを使用することは、私にとって悪い回避策のようです。だから、どんな助けも大歓迎です。

4

2 に答える 2

3

説明を探してしばらくして、カスタムビューについては触れていませんが、ついにandroidgoogleグループのRomainGuyから素晴らしいものを見つけました。

「状態を保存するためにビューが必要な場合を除いて、同じIDを使用してもかまいません。IDは、状態を保存するときにビューを識別するものであるため、ツールキットは2つのビューが同じであると単純に見なします。ただし、これはアクティビティ内でのみ当てはまります。 「」

「2つの異なるアクティビティで同じIDを使用しても問題はありません。また、実行していることに注意すれば、同じアクティビティ内で同じIDを使用しても問題はありません(たとえば、共有IDを持つビューが状態を保存する必要はありません。)あなたの場合、アクティビティは一連のタブの一部であるため、実際には一意のコンテキストに関連付けられています。つまり、共有IDで問題が発生します。」

これがリンクです。

于 2012-11-20T19:41:17.833 に答える
1

あなたの savedInstanceState メソッドはどのように見えますか?

ラジオボタンのテキストに割り当てられた変数は、方向の変更間で保持されないことをお勧めします。方向が変わると、アクティビティは完全に再構築/再起動されることに注意してください。

于 2012-10-20T08:02:45.827 に答える