5

アクティビティの場合、縦向きと横向きの 2 つの異なるレイアウト ファイルがあります。ある方向の要素は、他の方向の要素と直接関係がありますが、基本クラスによって関連付けられている可能性がありますが、まったく同じ型ではなく、同じ ID を持っています。たとえば、次のようになります。

レイアウト/main_layout.xml:

...
<ListView
 android:id="@+id/current_news_list"
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent"/>

次に、layout-land/main_layout.xml で: CustomListView は android.widget.AdapterView のサブクラスです。

...
<CustomListView 
 android:id="@+id/current_news_list"
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent"/>

向きを変更すると、「IllegalArgumentException: Wrong state class」がスローされます。これは予想される動作ですか?構成変更コードをオーバーライドしておらず、アクティビティを完全に破棄して再構築しています。レイアウト階層で同時に同一の識別子を持つ他のインスタンスを回避しました。

4

1 に答える 1

11

ビューの値 saveEnabled を false に設定します。

http://developer.android.com/reference/android/view/View.html#attr_android:saveEnabled

方向を変更している間、ID を持つビューの状態を保存しようとし、アクティビティを再作成するときに同じ状態を再作成しようとします。したがって、あなたの場合、あるタイプを他のタイプに変換することはできません。すなわち。ListView を CustomListView に変換することはできません。

そして、両方の向きを自分で処理する必要があります。

于 2011-07-12T17:22:32.080 に答える