我有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 :(得分:0)
为了使片段可以替换,必须以编程方式添加 - 而不是通过XML。
有关相关教程,请参阅here。
答案 1 :(得分:0)
按代码而不是布局创建初始片段:
将ID @+id/SigningIn
设置为布局中的片段容器(通常为FrameLayout
),代替<fragment />
标记。
当FragmentTransaction
为空时,onCreate()
Activity
中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();
}
}
,按代码创建初始片段:
{{1}}