2015-02-18 10 views
5

Ich entwerfe meine erste Anwendung mit Material Design und dem NavigationDrawer Layout usw., und ich stoße auf ein Problem. Die App ist sehr einfach (sie zeigt nur Text an) und basiert auf der in Android Studio verfügbaren Vorlage.Fehler beim Aufblasen des Klassenfragments InflateException Binäre XML-Datei

Beim Versuch, meine Anwendung zu starten bekomme ich folgende Logcat Fehler:

Java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test/com.example.test.MainActivity}: android.view.InflateException: Binary XML file line #22: Error inflating class fragment 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
     at android.app.ActivityThread.access$800(ActivityThread.java:144) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:135) 
     at android.app.ActivityThread.main(ActivityThread.java:5221) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
Caused by: android.view.InflateException: Binary XML file line #22: Error inflating class fragment 
     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:763) 
     at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:504) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:365) 
     at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:228) 
     at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102) 
     at com.example.test.MainActivity.onCreate(MainActivity.java:92) 
     at android.app.Activity.performCreate(Activity.java:5933) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
            at android.app.ActivityThread.access$800(ActivityThread.java:144) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:135) 
            at android.app.ActivityThread.main(ActivityThread.java:5221) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:372) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.support.v7.app.ActionBar.getThemedContext()' on a null object reference 
     at com.example.test.NavigationDrawerFragment.onCreateView(NavigationDrawerFragment.java:100) 
     at android.support.v4.app.Fragment.performCreateView(Fragment.java:1786) 
     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:920) 
     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 
     at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1206) 
     at android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2159) 
     at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:297) 
     at android.support.v7.app.ActionBarActivity.onCreateView(ActionBarActivity.java:547) 
     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727) 
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:504) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:365) 
            at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:228) 
            at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102) 
            at com.example.test.MainActivity.onCreate(MainActivity.java:92) 
            at android.app.Activity.performCreate(Activity.java:5933) 
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
            at android.app.ActivityThread.access$800(ActivityThread.java:144) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:135) 
            at android.app.ActivityThread.main(ActivityThread.java:5221) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:372) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 

Meine Haupttätigkeit ist wie folgt:

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mNavigationDrawerFragment = (NavigationDrawerFragment) 
       getSupportFragmentManager().findFragmentById(R.id.navigation_drawer); 
     mTitle = getTitle(); 

     // Set up the drawer. 
     mNavigationDrawerFragment.setUp(
       R.id.navigation_drawer, 
       (DrawerLayout) findViewById(R.id.drawer_layout)); 
} 

public static class PlaceholderFragment extends Fragment { 
     /** 
     * The fragment argument representing the section number for this 
     * fragment. 
     */ 
     private static final String ARG_SECTION_NUMBER = "section_number"; 

     /** 
     * Returns a new instance of this fragment for the given section 
     * number. 
     */ 
     public static PlaceholderFragment newInstance(int sectionNumber) { 
      PlaceholderFragment fragment = new PlaceholderFragment(); 
      Bundle args = new Bundle(); 
      args.putInt(ARG_SECTION_NUMBER, sectionNumber); 
      fragment.setArguments(args); 
      return fragment; 
     } 

     public PlaceholderFragment() { 
     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
      super.onCreateView(inflater, container, savedInstanceState); 
      View rootView = inflater.inflate(R.layout.fragment_main, container, false); 
      return rootView; 
     } 

     @Override 
     public void onAttach(Activity activity) { 
      super.onAttach(activity); 
      ((MainActivity) activity).onSectionAttached(
        getArguments().getInt(ARG_SECTION_NUMBER)); 
     } 
    } 

Die onCreateView von NavigationDrawerFragment:

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    mDrawerListView = (ListView) inflater.inflate(
      R.layout.fragment_navigation_drawer, container, false); 
    mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      selectItem(position); 
     } 
    }); 
    mDrawerListView.setAdapter(new ArrayAdapter<String>(
      getActionBar().getThemedContext(), 
      android.R.layout.simple_list_item_activated_1, 
      android.R.id.text1, 
      new String[]{ 
        getString(R.string.title_section1), 
        getString(R.string.title_section2), 
        getString(R.string.title_section3), 
      })); 
    mDrawerListView.setItemChecked(mCurrentSelectedPosition, true); 
    return mDrawerListView; 
} 

activity_main.xml:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity"> 
    <FrameLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/container" /> 
    <fragment android:id="@+id/navigation_drawer" 
     android:layout_width="@dimen/navigation_drawer_width" android:layout_height="match_parent" 
     android:layout_gravity="start" android:name="com.example.test.NavigationDrawerFragment" 
     tools:layout="@layout/fragment_navigation_drawer" /> 
</android.support.v4.widget.DrawerLayout> 

fragment_navigation_drawer.xml:

<ListView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
    android:layout_height="match_parent" android:choiceMode="singleChoice" 
    android:divider="@android:color/transparent" android:dividerHeight="0dp" 
    android:background="#cccc" tools:context=".NavigationDrawerFragment" /> 

fragment_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity$PlaceholderFragment"> 

    <TextView android:id="@+id/section_label" android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:elevation="5dp"/> 

    <TextView 
     android:id="@+id/status_display" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom" 
     android:elevation="5dp"> 
    </TextView> 

</RelativeLayout> 

Wenn Sie mehr Code benötigen, zögern Sie bitte nicht zu fragen. Vielen Dank!

Antwort

10

In Ihrer fragment_navigation_drawer.xml geben Sie eine ID zu Ihrer Listview und in Ihrer onCreateView von NavigationDrawerFragment.java Datei. diese

View myParentView = inflater.inflate(
     R.layout.fragment_navigation_drawer, container, false); 
mDrawerListView = (ListView) myParentView.findViewById(R.id.listview); 
// the listview is the id you gave to you listview in xml 

Wechsel:

mDrawerListView.setAdapter(new ArrayAdapter<String>(
      getActionBar().getThemedContext() 

An:

mDrawerListView.setAdapter(new ArrayAdapter<String>(
      getActivity(), 

Jetzt können Sie auch weiterhin (dies vorsorglich Code).

0

Ich hatte das gleiche Problem:

Meine Lösung hinzufügen mDrawerLayout=null; vor selectItem(mCurrentSelectedPosition); in onCreate() war.

-1

Ich hatte das gleiche Problem und es stellte sich heraus, dass ich meine Anwendung Vollbild und ohne Aktionsleiste gemacht habe.

Ich behob das Problem, indem ich mein Thema zu einem änderte, das die Aktionsleiste hatte.

0

Keiner der oben genannten funktionierte für mich. Was wirklich funktionierte, ist android:theme="...." von application XML-Tag in AndroidManifest.xml Datei zu entfernen ODER ein Thema hinzuzufügen, das ActionBar unterstützt. Hoffe, das hilft, jemanden den Kampf zu retten, den ich hatte.

Dieses Problem trat auf, als ich eine Navigationsschubladenaktivität in Android Studio 2.3.3 mit API 25 erstellte.

Verwandte Themen