2013-08-23 49 views
1

我正在使用碎片(android.support.v4.app.Fragment)的支持版本編寫Android應用程序。替換的碎片仍然有效

我在我的代碼中有一個奇怪的錯誤,我不知道如何解決它。 當我用另一個片段替換片段時,被替換的片段仍處於活動狀態並接收觸摸事件。點擊被替換的Fragment中Button的位置仍然會觸發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" /> 

... 

回答

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();