我有一个活动,可以在双窗格和单窗格之间切换,具体取决于方向,列表片段和详细信息视图片段
即。 纵向:单个窗格=列出片段/细节片段(选择项目时)
横向:双窗格=列出片段和详细信息片段
我收到以下用例的上述错误:
我看不出有什么问题。好像有几个人有类似的问题,但不确定是否完全一样。
以下是一些代码:
默认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>
横向活动_主要文件:
<?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();
}
...
答案 0 :(得分:0)
我无法找到确切问题的解决方案。但我正在阅读某些地方,将布局xml中定义的片段与在运行时动态加载的片段混合在一起可能会导致很多问题。
因此,要解决此问题,我更改了布局,使其仅包含帧布局占位符(即没有片段)。然后,我在运行时用实际片段动态替换占位符。
我的布局现在看起来像这样:
默认activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
android:id="@+id/myListFragment"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
横向活动_主要文件:
<?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" >
<FrameLayout
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>
现在我在我的活动中有2个函数在OnCreate()上调用。一个将列表片段添加到列表占位符,另一个将详细信息片段添加到详细信息占位符(如果是双窗格)。