2013-03-20 6 views
20

私はカスタムViewを持っています。同じアクティビティで複数回動的に追加されています。Androidビューでは、一部のビューの暗黙の状態保持をオフにします

カスタムビューインスタンスのそれぞれには、他のものの横にTextViewという子があります。 TextViewにはIDがあり、ビューインスタンスごとに同じです。

アクティビティが作成されたときに、それぞれのカスタムビューインスタンスに対してTextTextViewに設定しました。 画面を回転させると、アクティビティが再作成されますが、それぞれは同じText(テキストは最後のインスタンスのテキストと同じです)を表示します。

これは、インスタンスの状態の保存と復元によっていくつかの情報が自動的に保存されるためですが、この情報は明らかにIDにリンクされており、私の場合は問題が発生します。

特定のビューで自動状態保持を無効にする方法はありますか?

プロパティまたは設定または回避策はありますか?

答えて

38

View.setSaveEnabled (boolean enabled)メソッドを使用できます。

あなたが適用されるすべての階層のsetSaveEnabled必要がある場合には、saveEnabled属性android:saveEnabled="false"

+0

まさに私が必要とし、それが動作します!ありがとう! – Dusan

+0

ライフセーバーの回答!すばらしいです! –

+0

私のケースでは、 'RecyclerView'がオリエンテーション変更時に' StaggeredGridLayoutManager'状態を保存し、間違ったスパン数でリストアする際に 'ArrayIndexOutOfBoundsException'でクラッシュするのを防ぐのにも役立ちます。 – 0101100101

1

を使用してxml経由で保存自動状態を無効にすることも可能です:

public static void SaveEnableViewAndChildren(this View view, bool val) 
    { 
     if (view == null) 
      return; 
     view.SaveEnabled = val; 

     var viewGroup = view as ViewGroup; 
     if (viewGroup == null) 
      return; 
     for (int i = 0; i < viewGroup.ChildCount; i++) 
      SaveEnableViewAndChildren(viewGroup.GetChildAt(i), val); 
    } 
関連する問題