下の図に示すように、3 つのフラグメントがあります。これら 3 つのフラグメントすべてを .xml ファイルを使用して LinearLayout に追加しました。ランチャー アクティビティが開始したら、setContentView を使用してその .xml レイアウトを読み込みます。
私はfragment2にいくつかのコントロールを持っています。いずれかをクリックすると、 FragmentTransaction と commit メソッドを使用してプログラムで fragment4 がロードされます。このフラグメントは画面に追加されますが、問題は、プログラム的に追加された fragment4 が画面領域全体を占めることです。何が問題になる可能性がありますか?
注: f2 の項目をクリックすると、f2 のみを新しいフラグメント f4 に置き換えます。xml レイアウト ファイルを介して f1、f2、f3 を追加し、新しいフラグメント f4 をプログラムで追加したことに注意してください。
質問する
35158 次
2 に答える
39
常にプログラムでフラグメントを追加、削除、および置換する必要があります。そのため、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 に対してこれを行ったとします。次に、同じことを で再度実行して、f2 を f4 に置き換えます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();
}
于 2012-04-12T11:49:10.657 に答える
2
XML 内のフラグメントのプレースホルダーとして FrameLayout のみを保持します。OnCreate で、フレームレイアウトにフラグメントをロードします。フラグメントの OnClick で、その特定の FrameLayout の ID を指定して、Fragment4 に置き換えます。
于 2012-04-12T11:29:23.283 に答える