2012-04-12 16 views
19

下の図に示すように、3つのフラグメントがあります。 .xmlファイルを使用してLinearLayoutにこれら3つのフラグメントをすべて追加しました。ランチャーアクティビティの開始時にsetContentViewを使用してその.xmlレイアウトをロードします。

私はfragment2にいくつかのコントロールを持っています。いずれかをクリックすると、FragmentTransactionとcommitメソッドを使用してプログラムで フラグメント4がロードされます。この断片は画面に追加されますが、問題は画面全体に断片的に追加された断片4です。何が問題なの?

注:どの項目でもf2をクリックすると、f2のみを新しいフラグメントf4に置き換えます。私はf1、f2、f3をxmlレイアウトファイルに追加し、プログラムで新しいフラグメントf4を追加したことに留意してください。

enter image description hereフラグメントをプログラムで置き換えます。

+0

それでは、f2をf4に置き換えてください。最後に4つの断片を一緒に見せていますか? –

答えて

33

フラグメントをプログラマチックに追加、削除、置換する必要があります。したがって、F-1、F-2、F-3のフラグメントをFrameLayoutなどのコンテナに置き換えることをお勧めします。

基本的に<fragment/>要素をF-1にする代わりに、<FrameLayout/>要素にします。そして、あなたはFragmentActivityののonCreateでフラグメントのトランザクションを実行します。

Fragment1 f1 = new Fragment1(); 
FragmentTransaction ft = getFragmentManager().beginTransaction(); 
ft.replace(R.id.f1_container, f1); // f1_container is your FrameLayout container 
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
ft.addToBackStack(null); 
ft.commit(); 

を今、あなたはF-1、F-2、F-3のためにこれを行っていると仮定します。 OnClickListener

public void onClick(View v) { 
    Fragment4 f4 = new Fragment4(); 
    FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    ft.replace(R.id.f2_container, f4); // f2_container is your FrameLayout container 
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
    ft.addToBackStack(null); 
    ft.commit(); 
} 
+0

私はそこから事例を取ることができるように参考になっていますか? – MobiDev

+1

私は私の答えを編集しました。これはあなたの問題を痛感するはずです。 – CodePrimate

+1

ありがとうございます。私が理解しているところでは、フラグメントをXMLレイアウトに直接入れないでください。断片要素の代わりにframelayoutsを置きます。 f4をf2に置き換えると、f2のフレームが使用されます。私は正しい?あなたはそれをチェックするための参照サイトを与えることができます。 – MobiDev

2

XMLのフラグメントのプレースホルダとしてFrameLayoutだけを保持します。 OnCreateでframelayoutのフラグメントをロードします。フラグメントのOnClickは、特定のFrameLayoutのIDをFragment4で置き換えます。

関連する問題