这个应用程序是一个学习练习,我使用碎片,等等。它有一个单独的活动来管理一些不同的片段。第一个是ListFragment(A),它显示应用程序何时启动并从游标加载列表项。单击列表项将通知活动用该项的detailfragment(b)替换列表片段。如果我在看(b)时旋转屏幕,我看到(b)在(a)的顶部,如下所示:
http://postimage.org/image/uhy016ds7/
我最好的猜测是,这与android在配置更改时销毁并重新创建活动有关。我想知道这个问题最干净的解决办法是什么。下面是一些代码片段,如果还有什么需要我发布的,请告诉我。
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();
}

最佳答案

这是因为您使用框架布局作为容器。
其他布局不会重叠。
您想要实现的最佳实践是将一个XML文件放入您的布局/文件夹中,其中只使用您的ListFragment。
在layout land/中放置一个xml文件,其中使用并排列了片段。
然后系统处理的所有创建。碎片。您的活动基本上减少为setContentView()调用。
在列表项上单击,然后向片段管理器检查是否创建了详细片段。如果创建了它,您可以调用detail片段中的一个公共函数来设置数据。
如果未创建,则使用新活动创建意图。
我知道两个很好的教程:android开发者页面上的fragments页面和vogella.de都将为您提供一个详细的示例/教程。

07-24 09:52
查看更多