2012-10-18 24 views
6

2つのRadioButton、ID(@+id/radioButton1および@+id/radioButton2)を持つ1つのRadioGroupを持つカスタムコンポーネントがあります。一方、5つのタブを持つTabActivityがあります。各タブでは、このコンポーネントは複数回使用されます。復元時に同じIDを取得した同じIDを持つビュー

オリエンテーションが変更されてアクティビティが再作成されると、RadioButtonに同じattrsがロードされるという問題があります。これにはandroid:text,android:margin、さらには作成したスタイル付きattrsが含まれます。また、同じIDを持つすべてのCheckBoxで発生します。

なぜこれが起こったのかを調べるために、アンドロイドがonRestoreInstanceStateでこれを行っていると判断しました。スーパーメソッドを呼び出す行にコメントを付けるとうまく動作します。

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

} 

これはどのようになっていますか?または、これを引き起こすために何ができますか?

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

+0

私もこれを経験してきました。実際には、私がダウンしてこのバグを追跡しようとする日のカップルを費やしてきた。最悪の部分は、私の場合には、これらのビューは不正な値を受け取り、あります この動作は、SeekBarを他のものとグループ化するカスタムビューに埋め込まれているSeekBarで表示されています私はカスタムビューをアクティビティのさまざまな場所で再利用しますが、もちろんXMLファイルを再利用できることが望ましいです –

答えて

1

時間をかけて説明を探してから、私は最終的にAndroidのGoogleグループのRomain Guyから素晴らしいものを見つけましたが、カスタムビューは言及していません。それはあなたが自分の状態を保存するビューを必要とするときを除き、同じIDを使用しても大丈夫です。idは で単に ツールキットは、あなたの二つのビューが同じであることだと思う。しかし、それはですので、それらの状態が保存されるときのビューを識別するもの

」唯一 アクティビティ内の真の。「

」二つの異なる活動で同じIDを使用しても問題はありません。そして、 あなたは何」について注意している あれば問題は同じアクティビティ内で同じIDを使用してありません(例えば、共有IDを持つビュー が状態を保存する必要がない場合) あなたのケースでは、アクティビティこれらは実際には という固有のコンテキストに結びついています。つまり、 共有IDで問題が発生します。 「

Here's the link

+1

外部リソースにリンクするのではなく、ここに関連する小さな部分を含める必要があります。リンク自体は腐っていても良い答えではありません。 – slugster

1

savedInstanceStateメソッドの外観は?

ラジオボタンのテキストに割り当てられた変数は、方向の変更の間も持続しないことをお勧めします。オリエンテーションが変更されると、アクティビティは完全に再構築/再開されます。

+0

onSaveInstanceStateメソッドをオーバーライドしません。アンドロイドがtを持つ同じIDでビューを再ロードするのを防ぐためにonRestoreInstanceStateをオーバーライドします。彼は同じAttributeSetです。 –

+0

ラジオボタンのテキストは、カスタムビューの最後の出現の値を受け取ります。アンドロイドはビューの状態をidと関連付けたレイアウト全体を掃除しています(savedInstanceStateバンドル内にあります)。それが関連付けられたID。 –

+1

レイアウトランドフォルダを作成して同じレイアウトxmlファイルをコピーして、別のランドスケープレイアウトファイルを作成しようとしましたか?デバイスの向きに応じて、Androidは自動的に2つの間で切り替わります。これにより、デバイスは「新しい」情報でビューを再構築することがあります。 –

関連する問題