4

開発者ガイドでは、Fragmentを実行時に既存の にプログラムで追加できると書かれていViewGroupます。私の質問は次のとおりです。これViewGroupはアプリケーションにどのようにリンクされていますか?

ViewGroupこれまでのところ、アプリケーションのレイアウトを記述する xml ファイルでa を宣言しようとしました。Fragmentしかし、関数を使用してa を追加しようとするとpublic abstract FragmentTransaction add (int containerViewId, Fragment fragment, String tag)、アプリケーションがクラッシュします (すぐではなく、onCreateアプリケーションの関数の最後に)。

私が実際にやりたいことはFragment、アプリケーションでいくつかのビュー (として実装) を管理し、ユーザーの選択に応じてそれらを切り替えることです。アプローチに何を追加 (または変更) する必要がありますか?

お時間を割いていただき、ありがとうございます。

4

2 に答える 2

5

ViewGroup は単純なフレーム レイアウトにすることができます

<FrameLayout
android:id="@+id/fragmentForChange"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
/>

次に、このフレームをフラグメントに置き換えるには、nex を実行する必要があります。

Bundle args = new Bundle();        
// add needed args

//create fragment and set arguments    
Fragment fragment= MyFragment();
fragment.setArguments(args)

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
// getSupportFragmentManager - uses for compatible library instead of getFragmentManager

//replace frame with our fragment
ft.replace(R.id.fragmentForChange,fragment);
//set type of animation
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);

//finish transaction
ft.commit();

次のコマンドを使用して、トランザクション内のフラグメントを非表示または表示できます。

ft.hide(fragment);        
ft.show(fragment);        
于 2011-08-23T16:37:49.327 に答える
1

詳細を提供せず、ヒントを送信しただけなので、クラッシュの理由が何であるかはわかりません(私にとってはうまくいきましたが、Fragment APIが直感的すぎて使用できないため、それほど明白ではありません)。

FragmentTransaction で作成された Fragment はすぐに追加されるのではなく、独自の裁量で (後で、おそらく UI スレッドがビジーでないときに) 追加されることに注意してください。クラッシュの原因。

API の残りの部分は同期的であり、(インフレータを使用して) XML レイアウトの一部として Fragment を作成すると (インフレータを使用して) Fragment を作成すると、同様に同期的に作成され、 getView は常に値を返します。

これは可能な回避策です。葯のレイアウト インフレーション プロセスの一部として ViewGroup を作成すると、うまくいく可能性があります。

于 2011-10-25T13:57:49.567 に答える