0

私は2つのフラグメントを持っています:

  • 最初のフラグメントは中央の大きなボタンで構成されてOnClickListenerいます。このビューに (プログラムで) を設定し、クリックすると最初のフラグメントを 2 番目のフラグメントに置き換えます。
  • 2 番目のフラグメントは空のフラグメントです

まず、フラグメント番号を表示します。1. 次にボタンを押すと、予想どおり、2 番目のフラグメントが表示されます。

問題: 2 番目のフラグメントが表示され、その中央をクリックすると、現在ボタンのない EMPTY FRAGMENT を表示しているにもかかわらず、 1 番目のフラグメントOnClickListenerのボタンの背後にあるコードが起動します。

アイデア?

コードは次のとおりです。

public void onLargeButtonClick(View view){
        secondFragment fragment = new secondFragment();
        fragmentFactory.replaceFragment(fragment);
}

void replaceFragment(Fragment fragment){
    FragmentManager fragmentManager = activity.getSupportFragmentManager();
    String fragmentName = fragment.getClass().getSimpleName();
    Fragment existingFragment = fragmentManager.findFragmentByTag(fragmentName);
    if (existingFragment != null)
        fragmentManager.popBackStack(fragmentName, FragmentManager.POP_BACK_STACK_INCLUSIVE);

        FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction();
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
        ft.replace(R.id.first_fragment, fragment);
        ft.addToBackStack(null);
        ft.commit();
}

メインレイアウトには、置き換えるフラグメントが含まれています

   <fragment
            android:name="com.app.firstfragment"
            android:id="@+id/first_fragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            >
    </fragment>
4

3 に答える 3

0

ルート レイアウト要素の 1 つを に設定することで、新しい空のフラグメントをクリック可能にすることができますandroid:clickable="true"

これにより、クリックがインターセプトされ、その下のフラグメントに到達するのを防ぎます。

于 2012-10-28T13:14:02.580 に答える
0

なぜこれが起こっているのかについてはあまり良い答えではありませんが、私のアプリでも同様のことが起こっています。あなたが試すことができる(または確認する)いくつかのこと:

  • FragmentManager で最初のフラグメントを削除する
  • OnClickListener最初のフラグメントの onPause でボタンの を削除します
于 2012-10-28T13:14:27.593 に答える
0

xmlに追加されたフラグメントを置き換えることはできないと思います。

最初に削除android:name="com.app.firstfragment"

次に、アクティビティにコードで最初のフラグメントを追加します

protected void onCreate(Bundle savedInstanceState) {
            Fragment firstFragment = new firstFragment();
            FragmentTransaction ft = getFragmentManager().beginTransaction();
            ft.add(R.id.first_fragment, firstFragment).commit();
    }
于 2012-10-28T13:30:07.670 に答える