没有显示如果用另一个替换当前片段

时间:2012-10-12 17:57:15

标签: android android-layout

我有这样的布局:

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,但这不适合我,因为我需要用其他片段替换布局内容。

1 个答案:

答案 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();