屏幕旋转后Android fragment 重叠

标签 android fragment overlapping screen-rotation

这个应用程序是我使用 fragment 等的学习练习。它有一个单独的 Activity 来管理一些不同的 fragment 。第一个是 ListFragment (A),它显示应用何时启动并从光标加载列表项。单击列表项会通知 Activity 用该项目的 DetailFragment (B) 替换 ListFragment。如果在查看 (B) 时我旋转屏幕,我会看到 (B) 在 (A) 之上,如下所示:

http://postimage.org/image/uhy016ds7/

我最好的猜测是它与 Android 在配置更改时销毁并重新创建 Activity 有关。我想知道这个问题最干净的解决方案是什么。下面是一些代码 fragment ,让我知道是否还有其他我应该发布的内容。

res/layout/home.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment_container"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <fragment
        android:id="@+id/fragment_place_list"
        android:name="com.simbiosys.apps.foodfast.ui.PlaceListFragment"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
    </fragment>
</FrameLayout>

MyActivity.onCreate

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.home);

    placeListFragment = (PlaceListFragment) getSupportFragmentManager().findFragmentById(
            R.id.fragment_place_list);

}

MyActivity.showDetailPane

public void showDetailPane(String id, String reference) {
    placeDetailFragment = PlaceDetailFragment.newInstance(id, reference);
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction ft = fragmentManager.beginTransaction();
    ft.addToBackStack(null);
    ft.hide(placeListFragment);
    ft.replace(R.id.fragment_container, placeDetailFragment);
    ft.show(placeDetailFragment);
    ft.commit();
}

最佳答案

根据 Android 开发人员 page ,在 Activity 的 onCreate 方法中,您应该在将 fragment 添加到 Activity 之前检查 savedInstanceState 是否为 null。来自 this page 的 Activity 的 onCreate 方法的代码 fragment 声明。

// However, if we're being restored from a previous state,
// then we don't need to do anything and should return or else
// we could end up with overlapping fragments.
if (savedInstanceState != null) {
     return;
}

关于屏幕旋转后Android fragment 重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9369965/

相关文章:

Android:正确销毁asyncTask?

Android toLeftOf 和 toRightOf 不工作奇怪的行为

android - 基于函数调用栈优化Android App代码的方法?

android - fragment 过渡时屏幕闪烁

java - 运行时权限问题

android - Xamarin 表单导航后退按钮

运行时后未创建的 Android fragment

jQuery Masonry 在 slideToggle 事件上重叠 div

android - fragment 在后退按钮上重叠

html - 网站页脚在较小的屏幕上与页面内容重叠