2016-06-06 7 views
1

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.

+0

Ich habe dies überprüft, Layout mit Fragment integrieren und es funktioniert gut. –

+0

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. –

+0

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? –

Antwort

1

Versuchen Sie diesen Code:

MainActivity5.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> 

Fragment1.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> 
+0

ja das funktioniert, ich denke, mein Problem ist mit Appcompact .. im mit alten Version .. –

+0

@JamesCruz: okay, groß, bitte markieren Sie es als Antwort. –

Verwandte Themen