0

我有这样的布局:

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很多次才能显示另一个片段。

哪里错了?

PS 可以MyListFragment硬编码成 XML,但这不适合我,因为我需要用其他片段替换布局内容。

4

1 回答 1

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>

这就是我在片段活动中显示片段2(属于容器2)的方式:

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();
于 2012-10-15T15:39:05.390 回答