Android Fragment双窗格方向错误二进制XML文件行#7:错误膨胀类片段

时间:2013-05-22 15:32:12

标签: android android-fragments android-listfragment android-fragmentactivity

我有一个活动,可以在双窗格和单窗格之间切换,具体取决于方向,列表片段和详细信息视图片段

即。 纵向:单个窗格=列出片段/细节片段(选择项目时)

横向:双窗格=列出片段和详细信息片段

我收到以下用例的上述错误:

  1. 在纵向单个窗格列表中,单击项目以启动详细信息片段
  2. 将屏幕旋转为横向
  3. 例外!
  4. 我看不出有什么问题。好像有几个人有类似的问题,但不确定是否完全一样。

    以下是一些代码:

    默认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();
    }
    ...
    

1 个答案:

答案 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()上调用。一个将列表片段添加到列表占位符,另一个将详细信息片段添加到详细信息占位符(如果是双窗格)。