我有一个活动,可以根据带有列表片段和详细信息视图片段的方向在双窗格和单窗格之间切换
即纵向:单窗格=列表片段/细节片段(当一个项目被选中时)
横向:双窗格 = 列表片段和细节片段
对于以下用例,我收到上述错误:
- 在纵向单窗格列表中单击项目以启动详细信息片段
- 将屏幕旋转为横向
- 例外!
我看不出出了什么问题。似乎有几个人遇到过类似的问题,但不确定是否完全相同。
这是一些代码:
默认activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
class="com.example.MyListFragment"
android:id="@+id/myListFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
景观activity_main.xml:
<?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"
android:orientation="horizontal" >
<fragment
class="com.example.MyListFragment"
android:id="@+id/myListFragment"
android:layout_weight="1"
android:layout_width="0px"
android:layout_height="match_parent"/>
<FrameLayout android:id="@+id/myDetailsLayout"
android:layout_weight="1"
android:layout_width="0px"
android:layout_height="match_parent" />
</LinearLayout>
在 MainActivity.Java 中:
....
@Override
public void onMyItemSelected(DetailsItem item) {
Fragment newDetailFragment = new MyDetailFragment();
Bundle bundle = new Bundle();
bundle.putParcelable("details", item);
newDetailFragment.setArguments(bundle);
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction ft = fragmentManager.beginTransaction();
if (dualPane){
ft.replace(R.id.myDetailsLayout, newDetailFragment);
}
else {
ft.replace(R.id.myListFragment, newDetailFragment);
}
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.addToBackStack(null)
.commit();
}
...