0

ActionBarSherlock を使用して Android アプリを作成しています

私のレイアウトファイルは次のとおりです。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <FrameLayout 
        android:id="@+id/fragment_menu"
        android:layout_width="@dimen/menu_size"
        android:layout_height="wrap_content"/>

    <FrameLayout 
        android:id="@+id/dummy"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>

メニュー フラグメントで選択されているカテゴリに応じて、ダミーの FrameLayout.Eg のフラグメントを置き換えます。

 Bundle extras = new Bundle();
    extras.putInt(ProgramDetailFrament.EXTRA_PROGRAM_ID, programId);
    final ProgramDetailFrament fragment = ProgramDetailFrament.newInstance(extras);

    getSupportFragmentManager().beginTransaction()
        .replace(R.id.dummy, fragment)
        .addToBackStack(null)
        .commit();
    getSupportFragmentManager().executePendingTransactions();   

しかし、表示されているフラグメントを操作すると、置き換えられたフラグメントはまだタッチ/クリック イベントを受け取ります。SherlockFragment がこの問題に関連しているかどうかわかりませんか?

表示されているフラグメントのルート レイアウトでクリック イベントを設定し、このイベントでは何もしないことで解決しました。しかし、それは醜い解決策のようです。

解決方法は誰でも知っています。前もって感謝します。

4

2 に答える 2

0

質問で述べているように、 Fragment を別のものに置き換えようとしているため、 FragmentTransaction のreplace メソッドを使用する必要があります。

おおよその方法は次のとおりです。

Bundle extras = new Bundle();
extras.putInt(ProgramDetailFrament.EXTRA_PROGRAM_ID, programId);
ProgramDetailFrament fragment = ProgramDetailFrament.newInstance(extras);

FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.id_of_fragment_container, fragment, DETAIL_FRAGMENT_TAG);
ft.commit();

これが役立つことを願っています;-)

于 2013-10-25T08:32:51.673 に答える
0

addの代わりにreplace関数を使用する必要があります。あなたがしているのは、他のフラグメントの上にフラグメントを追加することです。つまり、すべてまだ表示されているフラグメントのスタックを作成していますが、一番上のフラグメントが他のすべてのフラグメントをカバーしているため、それらは表示されません。

追加の代わりに置換を使用します。

getSupportFragmentManager().beginTransaction()
    .replace(R.id.dummy, fragment)
    .addToBackStack(null)
    .commit();
getSupportFragmentManager().executePendingTransactions(); 

これにより、ダミー コンテナー内の他のすべてのフラグメントが削除され、選択したフラグメントが追加されます。

于 2013-10-25T08:54:46.390 に答える