Kar*_*uri 10 android fragment screen-rotation overlapping
这个应用程序是我使用碎片等学习练习.它有一个活动来管理一些不同的片段.第一个是ListFragment(A),它显示应用程序何时启动并从游标加载列表项.单击列表项会通知活动将ListFragment替换为该项目的DetailFragment(B).如果在看(B)的同时旋转屏幕,我会看到(B)在(A)之上,如下所示:
http://postimage.org/image/uhy016ds7/
我最好的猜测是它与Android销毁和重新创建配置更改活动有关.我想知道什么是这个问题最干净的解决方案.下面是一些代码片段,请告诉我是否应该发布其他内容.
RES /布局/ 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>
Run Code Online (Sandbox Code Playgroud)
MyActivity.onCreate
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.home);
placeListFragment = (PlaceListFragment) getSupportFragmentManager().findFragmentById(
R.id.fragment_place_list);
}
Run Code Online (Sandbox Code Playgroud)
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();
}
Run Code Online (Sandbox Code Playgroud)
Ela*_*kam 12
根据Android开发页面,在Activity的onCreate方法中,您应该在将片段添加到活动之前检查savedInstanceState是否为null.此页面上的onCreate方法的代码片段说明了这一点.
// 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;
}
Run Code Online (Sandbox Code Playgroud)
这是因为您使用框架布局作为容器.它不会与其他布局重叠.
对于您希望实现最佳实践的是将XML文件创建到您的布局/文件夹中,其中仅使用您的listfragment.在你的布局-land /中放入一个XML文件,其中包含使用和排列的两个片段.
然后系统处理所有的创建.片段.并且您的活动基本上减少为setContentView()调用.
在列表项上单击,然后检查片段管理器是否创建了详细信息片段.如果已创建,则在详细信息片段中调用公共函数来设置数据.
如果未创建,则使用新活动创建意图.
我知道2个很好的教程:android开发者页面上的片段页面和vogella.de都会给你一个详细的例子/教程.
| 归档时间: |
|
| 查看次数: |
8011 次 |
| 最近记录: |