片段交易不隐藏

时间:2014-05-03 17:02:56

标签: android

我有SigninFragmentButton。单击Button后,会向用户显示SignupFragment。我使用下面的代码执行FragmentTransaction并希望SignupFragment替换SigninFragment,而SignupFragment则显示在SigninFragment下方。谁能告诉我我做错了什么?

public void onClick(View v) {
    FragmentManager fragmentManager = getFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    WindowManager wm = getWindowManager();
    Display d = wm.getDefaultDisplay();
    SignUpFragment su = new SignUpFragment();
    fragmentTransaction.replace(R.id.SigningIn,  su);
    fragmentTransaction.commit();
}

活动布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bgmain"
tools:context=".MainActivity" 
    android:layout_gravity="center"
    android:focusableInTouchMode="true"
android:orientation="vertical"
     android:gravity="center">
        <fragment
        android:id="@+id/SigningIn"
        android:name=".SignInFragment"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center" 
        android:gravity="center"/>


</LinearLayout>

2 个答案:

答案 0 :(得分:0)

为了使片段可以替换,必须以编程方式添加 - 而不是通过XML。

有关相关教程,请参阅here

答案 1 :(得分:0)

按代码而不是布局创建初始片段:

将ID @+id/SigningIn设置为布局中的片段容器(通常为FrameLayout),代替<fragment />标记。

FragmentTransaction为空时,onCreate() ActivitysavedInstanceState执行@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.content); ... if (savedInstanceState == null) { SignInFragment f = new SignInFragment(); getFragmentManager().beginTransaction().add(R.id.SigningIn, f).commit(); } } ,按代码创建初始片段:

{{1}}