2014-05-03 41 views
-2

我有一个SigninFragment和一个Button。点击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> 
+0

有可能是出错了布局。请在你的问题中编辑你的'Activity'的布局。 –

+0

好的,我做了,现在你是什么是我的问题? –

回答

0

为了使片段是可更换的,它必须被编程方式添加 - 不经由XML。

请参阅here了解相关教程。

+0

我该怎么做? –

+0

查看我的更新回答链接。 – cybersam

0

要创建通过代码初始片段,而不是布局:

设置在布局的ID @+id/SigningIn的片段容器(通常是一个FrameLayout)代替您<fragment />标签。

通过在ActivityonCreate()FragmentTransaction创建通过代码最初的片段,当savedInstanceState为空:

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