2017-05-08 4 views
-1

Ich habe eine App mit 3 Swipe-Tabs. Also habe ich zuerst die mainActivity und dann die 3 Fragmente erstellt.NullPointerException DrawerLayout in TabbedActivity

Ich versuche, einen navigationdrawer in meinem tabbedactivity zu implementieren, aber ich erhalte eine Fehlermeldung „Nullpointer“, wenn ich versuche, meine DrawerLayout abrufen ..

Ich bin auf der Haupttätigkeit der gesamten Code zu tun , ist so, dass ich tun sollte, oder? Oder muss ich die Navigationsleiste in jedem Fragment erstellen?

Hier ist meine mainactivity xml-Datei:

<?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" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/drawerLayout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:fitsSystemWindows="true" 
tools:context="com.example.dasilvadd.students.OngletCours"> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 


    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:paddingTop="@dimen/appbar_padding_top" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      app:layout_scrollFlags="scroll|enterAlways" 
      app:popupTheme="@style/AppTheme.PopupOverlay"> 

     </android.support.v7.widget.Toolbar> 

     <android.support.design.widget.TabLayout 
      android:id="@+id/tabs" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 

    </android.support.design.widget.AppBarLayout> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

</RelativeLayout> 

<android.support.design.widget.NavigationView 
    android:id="@+id/menu_navigation" 
    android:layout_width="wrap_content" 
    android:layout_height="200dp" 
    android:layout_gravity="start" 
    android:visibility="invisible" 
    app:menu="@menu/navigation_menu"></android.support.design.widget.NavigationView> 

Und in meinem mainActivity:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_onglet_cours); 


    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 

    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 


    //récuperation des differents types de variables pour le menu de navigation 
    mDrawerLayout = (DrawerLayout)findViewById(R.id.drawerLayout); 
    mToogle = new ActionBarDrawerToggle(this,mDrawerLayout,toolbar,R.string.open,R.string.close); 

    //j'ajoute a mon DrawerLayout et je synchronise 
    mDrawerLayout.addDrawerListener(mToogle); 
    mToogle.syncState(); 

     //je récupère le menu de navigation 
    NavigationView navigation = (NavigationView)findViewById(R.id.menu_navigation); 

    // Create the adapter that will return a fragment for each of the three 
    // primary sections of the activity. 
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 

    // Set up the ViewPager with the sections adapter. 
    mViewPager = (ViewPager) findViewById(R.id.container); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 

    setTitle("Mes cours"); 

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); 
    tabLayout.setupWithViewPager(mViewPager); 


    //ce Listener permet de detecter quel item a été choisi dans mon menu 
    navigation.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 
     @Override 
     public boolean onNavigationItemSelected(MenuItem item) { 

      switch (item.getItemId()) 
      { //si c'est "Mes cours" qui a été choisi 
       case R.id.mes_cours: 
        //redirection vers la page "mes cours" 
        Intent cours = new Intent(OngletCours.this,MesCours.class); 
        startActivity(cours); 
        return true; 
       //actions a faire si "mes branches" a été choisi 
       case R.id.mes_branches: 
        Intent branche = new Intent(OngletCours.this,MesBranches.class); 
        branche.putExtra("ajouter","cours"); 
        startActivity(branche); 
        return true; 
       case R.id.mes_jalons: 
        Intent jalons = new Intent(OngletCours.this,PageiTude.class); 
        startActivity(jalons); 
      } 
      return true; 

     } 
    }); 

@update - log Fehler

Caused by: java.lang.NullPointerException 
                       at com.example.dasilvadd.students.OngletCours.onCreate(OngletCours.java:61) 
                       at android.app.Activity.performCreate(Activity.java:5372) 
                       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104) 
                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2257) 
                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349)  
                       at android.app.ActivityThread.access$700(ActivityThread.java:159)  
                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)  
                       at android.os.Handler.dispatchMessage(Handler.java:99)  
                       at android.os.Looper.loop(Looper.java:176)  
                       at android.app.ActivityThread.main(ActivityThread.java:5419)  
                       at java.lang.reflect.Method.invokeNative(Native Method)  
                       at java.lang.reflect.Method.invoke(Method.java:525)  
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)  
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)  
                       at dalvik.system.NativeStart.main(Native Method)  

Können Sie mir erklären, die Error ? Ich hoffe es ist kein dummer Fehler ... Danke!

Antwort

0

1. Sie versuchen Referenz falsche DrawerLayout id drawerLayout2

2.ActionBarDrawerToggle Zuhörer hinzufügen zu bekommen.

Versuchen Sie folgendes:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_onglet_cours); 

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    mDrawerLayout = (DrawerLayout)findViewById(R.id.drawerLayout); 

    mToogle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.open, R.string.close){ 

     @Override 
     public void onDrawerOpened(View drawerView) { 
      super.onDrawerOpened(drawerView); 
     } 

     @Override 
     public void onDrawerClosed(View drawerView) { 
      super.onDrawerClosed(drawerView); 
     } 
    }; 

    .............. 
    ..................... 
} 
+0

Eigentlich sagt es null, wenn ich diese Zeile zu tun, wie ist das möglich? – Dom

+0

erhalten Sie immer noch NullPointerException? Wenn ja, dann poste deine Fehlerprotokolle – FAT

+0

ich aktualisierte meine Frage überprüfe den Protokollfehler – Dom

Verwandte Themen