1

ビューの1つにListFragmentがあり、リストで選択を行い、そのフラグメントを別のリストに置き換えます。次に、このリストで別のリストを再度選択して、このリストを別のリストに置き換えますが、その3番目のリストは、置き換えられなかったように常に元のリストの上に表示されます。なぜこれが発生するのでしょうか。フラグメントを置き換えるときに3レベル深くすることはできません。

これがビューのレイアウトです

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" 
android:orientation="horizontal">


<fragment
    android:id="@+id/frameOne"
    android:name="com.tyczj.bowling.BowlersListFragment"
    android:layout_width="300dp"
    android:layout_height="match_parent"
    android:background="@drawable/list_background_holo" />

<fragment android:name="com.tyczj.bowling.BowlerEntryFrag"
    android:id="@+id/frameTwo"
    android:layout_height="match_parent"
    android:layout_width="fill_parent"/>


</LinearLayout>

frameOne常に置き換えられるフラグメントです

リスト内のアイテムが選択され、リストを新しいものに置き換えるために呼び出します

ft.replace(R.id.frameOne, infoLf).addToBackStack(null).commit();

次に、そのリストで別の選択が行われるので、そのようにもう一度置き換えます

ListFragment mBowlersBall = new BowlersBallList(bowlerID);
ft.replace(R.id.frameOne, mBowlersBall);
ft.addToBackStack(null).commit();

そしてそれはそれがこのように2つのリストを一緒に表示するときです

ここに画像の説明を入力してください

4

1 に答える 1

0

フラグメントを適切に置き換えていません。まず第一に、FragmentTransaction.replace()メソッドのドキュメントは非常に明確であり、メソッドにid提供されるのid、フラグメントが置き換えられるコンテナのものであり、あなたのように置き換えられるものidではないと記載されています。Fragment

次に、静的フラグメント(xmlレイアウトで宣言されている)と動的フラグメント(実行時に追加される)を混合していますが、これは実行すべきではありません。これを置き換える場合は、xmlレイアウトではなくコードでFragment宣言する必要があります(この問題については、Androidエンジニアの1人からのこの応答を参照してください)。Fragment

したがって、の代わりにframeOne Fragment、ラッパーレイアウト(FrameLayoutたとえばなど)を。で挿入しますid。メソッドでは、onCreateイニシャルFragmentBowlersListFragment)を追加し、その中の選択に基づいて、ラッパーレイアウトと新しいインスタンスのをメソッドにFragment与えることで置き換えます。FragmentTransaction.replace()idFragment

于 2012-11-04T09:44:06.407 に答える