Ich habe zu meinem Projekt eine Bibliothek von https://github.com/yarolegovich/MaterialPreferences installiert. Ich habe es erfolgreich ausgeführt und es funktioniert gut, wenn ich eine AKTIVITÄT verwende. Mein Problem ist jedoch, wenn ich das XML-Layout von einem FRAGMENT aufrufen.yarolegovich - Fehler beim Aufblasen der Klasse in Fragment
Hier ist mein Layout 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>
dies, wie ich es von meinem Fragment nennen, die Fehler bekommen :(
<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>
DIES IST DIE AUSNAHME
<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>
ist dies die MaterialPreferenceCategory.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>
Jede Hilfe oder Anregung ist willkommen! P.S. Ich habe die vollständige Ausnahme nicht kopiert, da sie zu lang ist.
Ich habe dies überprüft, Layout mit Fragment integrieren und es funktioniert gut. –
hi @ManishJain, ich habe in onCreateView-Methode unter der Fragment-Klasse inflater, aber es gibt mir immer noch dieses Problem. Das Problem liegt bei MaterialPreferenceCategory.java. Es funktioniert auf Aktivität, aber wenn ich Fragment verwende, funktioniert es nicht. –
Ich werde meinen Demo-Code in einiger Zeit veröffentlichen, ein neues Projekt mit meinem Code erstellen und dann prüfen, ob es noch abstürzt? –