亚罗列戈维奇 - 在片段中膨胀类时出错



我已经在我的项目中安装了来自 https://github.com/yarolegovich/MaterialPreferences 的库。我已经成功运行了它,当我使用 ACTIVITY 时它工作正常。但是,我的问题是当我从片段调用 xml 布局时。

这是我的布局xml。

< ? xml version="1.0" encoding="utf-8"? >
< com.yarolegovich.mp.MaterialPreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/preference_screen"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:context=".ui.activities.StartupActivity">

    <com.yarolegovich.mp.MaterialPreferenceCategory
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <com.yarolegovich.mp.MaterialSwitchPreference
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:mp_icon="@drawable/ic_insert_emoticon_black_24dp"
            app:mp_key="@string/pkey_use_lovely"
            app:mp_title="@string/use_lovely_module" />
        <com.yarolegovich.mp.MaterialStandardPreference
            android:id="@+id/pref_configs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:mp_icon="@drawable/ic_settings_black_24dp"
            app:mp_title="@string/app_configs" />
        <com.yarolegovich.mp.MaterialStandardPreference
            android:id="@+id/pref_form"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:mp_icon="@drawable/ic_supervisor_account_black_24dp"
            app:mp_title="@string/fill_the_form" />
    </com.yarolegovich.mp.MaterialPreferenceCategory>
< / com.yarolegovich.mp.MaterialPreferenceScreen>

这是我从我的片段中调用它的方式,该片段出错:(

<pre>
package singbiz.posonthego.ui.fragments.pages;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.content.ContextCompat;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.yarolegovich.lovelyuserinput.LovelyInput;
import com.yarolegovich.mp.io.MaterialPreferences;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import butterknife.ButterKnife;
import singbiz.posonthego.R;
import singbiz.posonthego.ui.activities.StartupActivity;
//import singbiz.posonthego.ui.fragments.Prefs;
/**
 * Created by james on 31/5/16.
 */
public class SettingsFragment extends Fragment implements StartupActivity.EventHandler, View.OnClickListener, SharedPreferences.OnSharedPreferenceChangeListener {
    private StartupActivity parentActivity;
    private Context context;
    @Override
    public void handleScanResult(String result) {
    }
    @Override
    public void handleOnPrintResult(int status) {
    }
    @Override
    public List<String> onSearchAutocomplete(String query) {
        return null;
    }
    @Override
    public void onSearch(String result) {
    }
    @Override
    public void onSearchStatus(boolean open) {
    }
    @Override
    public void onChildActivityResult(int request_code, int result_code, Intent data) {
    }
    @Override
    public void onPageInit() {
    }
    @Override
    public void onPageRelease() {
    }
    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        /*if (key.equals(Prefs.keys().KEY_USE_LOVELY)) {
            setUserInputModule(sharedPreferences.getBoolean(key, false));
        }*/
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_settings, container, false);
        //ButterKnife.bind(this, view);
        //initPage();
        return view;
    }
    private void initPage() {
        parentActivity = (StartupActivity) getActivity();
        parentActivity.setPageTitle(getString(R.string.settings));
        context = getContext();
        //Prefs.init(context);
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
        prefs.registerOnSharedPreferenceChangeListener(this);
        //setUserInputModule(prefs.getBoolean(Prefs.keys().KEY_USE_LOVELY, false));
    }
    private void setUserInputModule(boolean shouldUseLovelyModule) {
    }
    @Override
    public void onClick(View v) {
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
        prefs.unregisterOnSharedPreferenceChangeListener(this);
    }
}
</pre>

这是例外

<pre>
E/AndroidRuntime: FATAL EXCEPTION: main
android.view.InflateException: Binary XML file line #20: Error inflating class com.yarolegovich.mp.MaterialPreferenceCategory
at android.view.LayoutInflater.createView(LayoutInflater.java:613)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:749)
at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
at singbiz.posonthego.ui.fragments.pages.SettingsFragment.onCreateView(SettingsFragment.java:86)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:742)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:517)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4794)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
at android.view.LayoutInflater.createView(LayoutInflater.java:587)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:749) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
at singbiz.posonthego.ui.fragments.pages.SettingsFragment.onCreateView(SettingsFragment.java:86) 
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252) 
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:742) 
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617) 
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:517) 
at android.os.Handler.handleCallback(Handler.java:615) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:4794) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: android.view.InflateException: Binary XML file line #10: Error inflating class <unknown>
at android.view.LayoutInflater.createView(LayoutInflater.java:613)
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:660)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:749)
at android.view.LayoutInflater.inflate(LayoutInflater.java:459)
at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
at android.view.View.inflate(View.java:16140)
at com.yarolegovich.mp.MaterialPreferenceCategory.init(MaterialPreferenceCategory.java:56)
at com.yarolegovich.mp.MaterialPreferenceCategory.<init>(MaterialPreferenceCategory.java:33)
at java.lang.reflect.Constructor.constructNative(Native Method) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:417) 
at android.view.LayoutInflater.createView(LayoutInflater.java:587) 
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:749) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
at singbiz.posonthego.ui.fragments.pages.SettingsFragment.onCreateView(SettingsFragment.java:86) 
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252) 
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:742) 
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617) 
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:517) 
at android.os.Handler.handleCallback(Handler.java:615) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:4794) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
at android.view.LayoutInflater.createView(LayoutInflater.java:587)
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:660) 
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:749) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:459) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
at android.view.View.inflate(View.java:16140) 
at com.yarolegovich.mp.MaterialPreferenceCategory.init(MaterialPreferenceCategory.java:56) 
at com.yarolegovich.mp.MaterialPreferenceCategory.<init>(MaterialPreferenceCategory.java:33) 
at java.lang.reflect.Constructor.constructNative(Native Method) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:417) 
at android.view.LayoutInflater.createView(LayoutInflater.java:587) 
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:749) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
at singbiz.posonthego.ui.fragments.pages.SettingsFragment.onCreateView(SettingsFragment.java:86) 
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252) 
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:742) 
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617) 
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:517) 
at android.os.Handler.handleCallback(Handler.java:615) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:4794) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556) 
</pre>

这是材料偏好类别.java

<pre>
package com.yarolegovich.mp;
import android.content.Context;
import android.content.res.TypedArray;
import android.support.annotation.ColorInt;
import android.support.annotation.ColorRes;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.CardView;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.TextView;
import static com.yarolegovich.mp.util.Utils.*;
/**
 * Created by yarolegovich on 01.05.2016.
 */
public class MaterialPreferenceCategory extends CardView {
    private ViewGroup container;
    private TextView title;
    public MaterialPreferenceCategory(Context context) {
        super(context);
        init(null);
    }
    public MaterialPreferenceCategory(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(attrs);
    }
    public MaterialPreferenceCategory(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(attrs);
    }
    private void init(AttributeSet attrs) {
        int titleColor = -1;
        String titleText = "";
        if (attrs != null) {
            TypedArray ta = getContext().obtainStyledAttributes(attrs, R.styleable.MaterialPreferenceCategory);
            try {
                if (ta.hasValue(R.styleable.MaterialPreferenceCategory_mpc_title)) {
                    titleText = ta.getString(R.styleable.MaterialPreferenceCategory_mpc_title);
                }
                titleColor = ta.getColor(R.styleable.MaterialPreferenceCategory_mpc_title_color, -1);
            } finally {
                ta.recycle();
            }
        }
        inflate(getContext(), R.layout.view_preference_category, this);
        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT);
        params.setMargins(0, 0, 0, dpToPixels(getContext(), 4));
        setUseCompatPadding(true);
        setRadius(0);
        container = (ViewGroup) findViewById(R.id.mpc_container);
        title = (TextView) findViewById(R.id.mpc_title);
        if (!TextUtils.isEmpty(titleText)) {
            title.setVisibility(View.VISIBLE);
            title.setText(titleText);
        }
        if (titleColor != -1) {
            title.setTextColor(titleColor);
        }
    }
    public void setTitle(String titleText) {
        title.setVisibility(View.VISIBLE);
        title.setText(titleText);
    }
    public void setTitleColor(@ColorInt int color) {
        title.setTextColor(color);
    }
    public void setTitleColorRes(@ColorRes int colorRes) {
        title.setTextColor(ContextCompat.getColor(getContext(), colorRes));
    }
    @Override
    public void addView(View child) {
        if (container != null) {
            container.addView(child);
        } else {
            super.addView(child);
        }
    }
    @Override
    public void addView(View child, int index) {
        if (container != null) {
            container.addView(child, index);
        } else {
            super.addView(child, index);
        }
    }
    @Override
    public void addView(View child, ViewGroup.LayoutParams params) {
        if (container != null) {
            container.addView(child, params);
        } else {
            super.addView(child, params);
        }
    }
    @Override
    public void addView(View child, int index, ViewGroup.LayoutParams params) {
        if (container != null) {
            container.addView(child, index, params);
        } else {
            super.addView(child, index, params);
        }
    }
}
</pre>

任何帮助或建议不胜感激!附言我没有复制完整的异常,因为它太长了。

试试这段代码:

主要活动5.java

import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
public class MainActivity5 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main5);
    Fragment1 fragment = new Fragment1();
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction ft = fragmentManager.beginTransaction();
    ft.replace(R.id.container, fragment, "fragment1");
    ft.addToBackStack(null);
    ft.commit();
}
}

activity_main5.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="vertical">

    <FrameLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

片段1.java

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
/**
 * Created by ManishJ1 on 6/3/2016.
 */
public class Fragment1 extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_f1, container, false);
        return rootView;
    }
}

fragment_f1.xml

<?xml version="1.0" encoding="utf-8"?>
<com.yarolegovich.mp.MaterialPreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/preference_screen"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <com.yarolegovich.mp.MaterialPreferenceCategory
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <com.yarolegovich.mp.MaterialSwitchPreference
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:mp_icon="@drawable/ic_launcher"
            app:mp_key="@string/app_name"
            app:mp_title="@string/app_name" />
        <com.yarolegovich.mp.MaterialStandardPreference
            android:id="@+id/pref_configs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:mp_icon="@drawable/ic_launcher"
            app:mp_title="@string/app_name" />
        <com.yarolegovich.mp.MaterialStandardPreference
            android:id="@+id/pref_form"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:mp_icon="@drawable/ic_launcher"
            app:mp_title="@string/app_name" />
    </com.yarolegovich.mp.MaterialPreferenceCategory>
</com.yarolegovich.mp.MaterialPreferenceScreen>

相关内容

最新更新