替换的碎片仍然有效

时间:2013-08-23 14:56:09

标签: android android-fragments android-support-library

我正在使用Fragments的支持版本(android.support.v4.app.Fragment)编写Android应用程序。

我的代码中有一个奇怪的错误,我不知道如何修复它。 当我用另一个片段替换片段时,替换片段仍处于活动状态并接收触摸事件。从替换的片段中点击按钮的位置仍将触发OnClick事件。

我真的不知道如何解决这个问题。有人能帮助我吗?

Java代码

Fragment newFragment = new LoginActivityRegisterFragment();

...

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.replace(R.id.login_fragment, newFragment);
ft.commit();

...

XML布局

...

<fragment
    class="de.myapp.fragments.LoginActivityMainFragment"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:id="@+id/login_fragment" />

...

1 个答案:

答案 0 :(得分:3)

您只能在容器视图中替换片段。这意味着您需要一个容器(而不是片段本身)。

<FrameLayout
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:id="@+id/container" />

然后你可以通过添加一个片段来初始化它。

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.add(R.id.container, new LoginActivityMainFragment());
ft.commit();

然后你可以替换它。

Fragment newFragment = new LoginActivityRegisterFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.replace(R.id.container, newFragment);
ft.commit();