私は実装する複雑なレイアウトを持っています。 このセクションには、ユーザーが以前に入力した多数のパラメータに基づいて表示することも、表示しないこともできる19個のセクションがあります。 コードを簡素化し、未使用のセクションを表示しないために、レイアウトは動的に作成されます。同じIDを持つビューが2つあるフラグメントを復元する
すべてが断片の中にあります。 フラグメントには、コンテナとして使用されるLinearLayoutがあり、フラグメントが作成されると、必要なすべてのセクションが生成されます。
各セクションは、このセクションのレイアウトを膨らませてコンテナに追加する独自のローカルアダプタによって管理されます。
すべてが問題なく動作します。問題は、2つのセクションが同じ構造を持ち、同じxmlレイアウトを共有していることです。そのため、両方のセクションの内部ビューは同じIDを持ちます。これは、セクションがそのアダプタでローカルに管理されるため、問題ではありません。 問題は、次のフラグメントに行ってからこのフラグメントに戻ったときに表示されます。システムはビューの以前の状態を回復しようとします。これらの2つのセクションは同じIDを持つため、2つ目のセクションが復元されると、その値も最初のビューに設定されます。
これを管理したり、状態を復元しないようにフラグメントを通知する方法はありますか(すべてを手動で再読み込みするため)。ここ
は、現在の構造の光一例である。
フラグメントXML
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
部XML
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/section_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
断片コード
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_layout, container, false);
if (<condition>)
createSection1(getContext(),view);
if (<condition>)
createSection2(getContext(),view);
return view;
}
private void createSection1(Context context, ViewGroup root){
Section1Adapter adapter = new Section1Adapter(context, root);
// ...
}
private void createSection2(Context context, ViewGroup root){
Section2Adapter adapter = new Section2Adapter(context, root);
// ...
}
アダプターコード(どちらも同じ考え方)
public Section2Adapter(LayoutInflater inflater, ViewGroup root) {
View view = LayoutInflater.from(context).inflate(R.layout.section_layout, root, false);
initView(view);
root.addView(view);
}
Wahoo!驚くべき答え! Thxは私がそれについて知らなかったのと非常によく似ています。これはまさに私が探していたものです。 – Eselfar