我有这样的布局:
frame_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/items"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
接下来,在FragmentActivity中我做:
setContentView(R.layout.fragment_layout);
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
String tag = MyListFragment.class.getName();
MyListFragment fragment = (MyListFragment)
getSupportFragmentManager().findFragmentByTag(tag);
if (fragment == null) {
fragment = new MyListFragment();
ft.add(R.id.items, fragment, tag);
}
else {
ft.replace(R.id.items, fragment, tag);
}
ft.addToBackStack(null);
ft.commit();
当我调用此代码一次时,片段显示完美!但是,当它打了两次电话时我看不到任何内容! 经过一番调查,我发现问题是由此引起的:
setContentView(R.layout.fragment_layout);
例如,当它被调用一次时,片段内容被完美显示!但是我需要多次调用setContentView
来显示另一个片段。
哪里出错?
P.S。可以将MyListFragment
硬编码为XML,但这不适合我,因为我需要用其他片段替换布局内容。
答案 0 :(得分:0)
由于没有人回答,我找到了另一种解决方案:保持每个帧的布局并显示/隐藏它们。
我就是这样做的....主要布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/container1"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
<FrameLayout
android:id="@+id/container2"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
这就是我在片段活动中展示fragment2(属于container2)的方式:
findViewById(R.id.container1).setVisibility(View.GONE);
findViewById(R.id.container2).setVisibility(View.VISIBLE);
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
String tag = MyFragment.class.getName();
Fragment fragment = (Fragment)getSupportFragmentManager().findFragmentByTag(tag);
if (fragment == null) {
fragment = new MyFragment();
ft.add(R.id.container2, fragment, tag);
}
ft.addToBackStack(null);
ft.commit();