【发布时间】:2017-01-12 04:50:12
【问题描述】:
我有两个 activity_main.xml 变体(用于纵向/横向)。在此活动中,用户可以选择项目并浏览有关所选项目的详细信息。
在portraint方向,Fragment动态添加到flFragmentContainer,item选择后,details fragment替换list fragment:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/flFragmentContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"></FrameLayout>
</LinearLayout>
在横向,XML文件中静态描述的片段:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<fragment
android:id="@+id/frgTaskList"
android:name="com.exprod.xchecklist.fragments.TaskListFragment"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
tools:layout="@layout/fragment_task_list" />
<fragment
android:id="@+id/frgTaskDetails"
android:name="com.exprod.xchecklist.fragments.TaskDetailsFragment"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
tools:layout="@layout/fragment_task_details">
</fragment>
</LinearLayout>
</LinearLayout>
这是(MainActivity的)onCreate()方法的代码。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentManager fragmentManager = getSupportFragmentManager();
TaskDetailsFragment taskDetailsFragment = (TaskDetailsFragment)fragmentManager.findFragmentById(R.id.frgTaskDetails);
isDynamicMode = taskDetailsFragment == null || !taskDetailsFragment.isInLayout();
if(isDynamicMode){
FragmentTransaction transaction = fragmentManager.beginTransaction();
Fragment taskListFragment = new TaskListFragment();
if (savedInstanceState == null) {
transaction.add(R.id.flFragmentContainer, taskListFragment, TaskListFragment.FRAGMENT_TAG);
}else{
transaction.replace(R.id.flFragmentContainer, taskListFragment, TaskListFragment.FRAGMENT_TAG);
}
transaction.commit();
}
}
问题:当我将设备旋转到横向时,我在第一个片段 (TaskListFragment) 中调用了两次创建方法(onCreateView(), onActivityCreated(), ... em>)。这表明旧片段仍处于活动状态并在方向更改时重新创建。 我如何才能最终销毁旧片段?我在网上没有找到答案。
P.S: 对不起我的英语不好...
【问题讨论】:
标签: android android-layout android-fragments android-lifecycle