二进制XML文件行#41:错误导致类片段

时间:2015-05-30 23:59:19

标签: android android-fragments

日志错误: pastebin.com/YLvmkAd4

FragmentSettings.class:

package com.android.app;

import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.PreferenceFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class FragmentSettings extends PreferenceFragment {

    [..]

    @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

            mListPreference = (ListPreference) getPreferenceManager().findPreference("preference_key");

            return inflater.inflate(R.layout.activity_main, container, false);
        }
}

activity_main.xml中:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawer"
    android:layout_width="match_parent"
    android:fitsSystemWindows="true"
    android:layout_height="match_parent">

    <LinearLayout android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <include
            android:id="@+id/toolbar_actionbar"
            layout="@layout/toolbar_default"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <FrameLayout
            android:id="@+id/container"
            android:layout_width="match_parent"
            android:clickable="true"
            android:layout_height="match_parent">
            <ListView
                android:id="@android:id/list"
                android:layout_width="match_parent"
                android:layout_height="match_parent">
            </ListView>
        </FrameLayout>
    </LinearLayout>
    <!-- android:layout_marginTop="?android:attr/actionBarSize"-->
    <com.android.app.ScrimInsetsFrameLayout
        android:id="@+id/scrimInsetsFrameLayout"
        android:layout_width="@dimen/navigation_drawer_width"
        android:layout_height="wrap_content"
        android:fitsSystemWindows="true"
        android:layout_gravity="start"
        app:insetForeground="#4000"
        android:elevation="10dp">

        <fragment
            android:id="@+id/fragment_drawer"
            android:name="com.android.app.NavigationDrawerFragment"
            android:layout_width="@dimen/navigation_drawer_width"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:layout="@layout/fragment_navigation_drawer" />
    </com.android.app.ScrimInsetsFrameLayout>


</android.support.v4.widget.DrawerLayout>

设备:

Oppo N1, Android 4.2.2
Samsung Galaxy Note 1, Android 5.1.1

我现在花了几个小时来处理这个错误,却找不到它。线索是完全相同的应用程序在Android 5.1.1上完美运行。

其他:

MainActivity.java pastebin.com/a2NZLZFm

NavigationDrawerFragment.java pastebin.com/PqTMiPp3

fragment_navigation_drawer.xml pastebin.com/eVeAdv17

3 个答案:

答案 0 :(得分:1)

<fragment
     android:id="@+id/fragment_drawer"
     android:name="com.android.app.NavigationDrawerFragment"
     android:layout_width="@dimen/navigation_drawer_width"
     android:layout_height="match_parent"
     android:fitsSystemWindows="true"/>

使用这个,并在你的onCreateView() android中扩充布局将负责添加它ViewGroup / window等等

这是MainActivity中的这一行

 // Set up the drawer.
    mNavigationDrawerFragment.setup(R.id.fragment_drawer, 
             (DrawerLayout) findViewById(R.id.drawer), mToolbar);

删除它,错误就会消失。现在接下来就是让Activity自己处理Drawerlayout。所以将所有抽屉代码转移到您的活动中并忘记片段中的setup()方法

原因是因为您将片段声明为Activity中的嵌入,因此android会为您启动它,因此您无需进行设置

希望它有效

答案 1 :(得分:0)

嗯,你们都帮助了我很多,但我自己解决了这个问题;)

我改变了..

public class FragmentSettings extends PreferenceFragment {

    public ListPreference mListPreference;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        mListPreference = (ListPreference) getPreferenceManager().findPreference("preference_key");
        return inflater.inflate(R.layout.activity_main, container, false);
    }
}

要..

public class FragmentSettings extends PreferenceFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);
    }

}

并删除此onCreateViewmListPreference :)希望这有助于其他人;)

答案 2 :(得分:0)

将此行添加到styles.xml文件中。

<item name="preferenceTheme">@style/PreferenceThemeOverlay</item>