2017-05-08 14 views
-1

私は3つのスワイプタブを持つアプリを持っています。だから私は最初にmainActivityと3つの断片を作りました。TabbedActivityのNullPointerException DrawerLayout

私は私のtabbedactivityでnavigationdrawerを実装しようとしているが、私はエラー「NullPointerExceptionが」そうだ、私は私のDrawerLayoutを取得しようとすると...

私が主な活動にすべてのコードをやっていますそれは私がやるべきようなものですね。または、各フラグメントにナビゲーションドロワを作成する必要がありますか?

ここに私のmainactivity xmlファイルです:

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

そして、私の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 - あなたは私を説明でき、エラー

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)  

をログにエラー?私はそれが間抜けなエラーではないことを願って...ありがとう!

答えて

0

1.あなたはActionBarDrawerToggleリスナーを追加し、間違ったDrawerLayout ID drawerLayout2

の参照を取得しようとしています。

これを試してみてください:私はその行を行うとき

@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

実際に、それは可能ということですか、nullを言いますか? – Dom

+0

あなたはまだNullPointerExceptionを取得していますか?はいの場合はエラーログを投稿してください – FAT

+0

私の質問が更新されましたログエラーを確認してください – Dom

関連する問題