2017-09-22 62 views
0

我有導航抽屜,它上面有物品。但是當我點擊時,沒有任何反應。這段代碼有什麼問題?當我點擊裏面的物品時,NavigationItemSelectedListener無法觸發

navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 
      @Override 
      public boolean onNavigationItemSelected(MenuItem menuItem) { 
       switch (menuItem.getItemId()) { 
        case R.id.navi_1: 
         Intent intent = new Intent(BaseOrderActivity.this,BaseOrderActivity.class); 
         intent.putExtra("dataDealerCode",dataorderCode); 
         startActivity(intent); 
         finish(); 
         return true; 
        case R.id.navi_2: 
         Intent intent2 = new Intent(BaseOrderActivity.this,MappingProductRecycler.class); 
         intent2.putExtra("dataDealerCode",dataorderCode); 
         startActivity(intent2); 
         finish(); 
         return true; 
        case R.id.navi_3: 
         Intent intent3 = new Intent(BaseOrderActivity.this,UpdateProductActivity.class); 
         intent3.putExtra("dataDealerCode",dataorderCode); 
         startActivity(intent3); 
         finish(); 
         return true; 
        case R.id.navi_4: 
         return true; 
       } 
       //drawerLayout.closeDrawers(); 
       return true; 
      } 
     }); 

當我把斷點NavigationItemSelected,它不會停止在斷點,所以我不能啓動我的選擇對其他活動的基礎。爲什麼?

這是我的佈局:

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:fitsSystemWindows="true" 
    android:layout_height="match_parent"> 
    <FrameLayout 
     android:animateLayoutChanges="true" 
     android:id="@+id/container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     tools:context=".BaseOrderActivity" 
     /> 
    <android.support.design.widget.NavigationView 
     android:id="@+id/navigation_view" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     app:menu="@menu/navigation"/> 

<RelativeLayout 
    android:id="@+id/main_layout" 
    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:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".BaseOrderActivity"> 


    <android.support.design.widget.TabLayout 
     android:id="@+id/tab_layout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="?attr/colorPrimary" 
     android:elevation="6dp" 
     android:minHeight="?attr/actionBarSize" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> 


    <android.support.v4.view.ViewPager 
     android:id="@+id/pager" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/tab_layout" 
     android:layout_y="50dp" /> 

</RelativeLayout> 


</android.support.v4.widget.DrawerLayout> 

什麼錯我的佈局?

+0

嘗試把你的onNavigationItemSelected,DrawerLayout抽屜=(DrawerLayout)findViewById(R.id.drawer_layout)結束; drawer.closeDrawer(GravityCompat.START); invalidateOptionsMenu(); 返回true; – zephyr

+0

你能告訴我們你的XML爲導航抽屜和菜單項嗎? –

+0

@zephyr我已經把這段代碼放到了我的onNavigationSelected結尾,但它沒有任何改變。 –

回答

0

既然你有了,您的導航項目選擇似乎不起作用,以下是可能的故障排除步驟:

  1. 檢查導航視圖是否已正確初始化。

    mNavigationView = (NavigationView) findViewById(R.id.navigation); //navigation is the id of the xml for your navigation view. 
    
  2. 入住交換機情況下的ID。 R.id.navi_1:等(navi_1, etc.)確實有效。

編輯:

你應該有2只在你的抽屜佈局視圖(孩子)。第一個孩子是抽屜關閉時顯示的孩子,第二個孩子是抽屜打開時顯示的孩子。

請參閱下面的示例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" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true"> 

    // this is the main screen, shown when the drawer is CLOSED 
    // 1st VIEW 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 
     <include 
      layout="@layout/toolbar"/> 

     <ListView 
      android:id="@+id/list_view_home_users" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"/> 


    </LinearLayout> 

    // This view is shown when drawer is OPEN 
    // 2nd View 
    <android.support.design.widget.NavigationView 
     android:id="@+id/navigation" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     app:headerLayout="@layout/nav_header_layout" 
     app:itemTextAppearance="@style/TextAppearance.Design.Snackbar.Message" 
     app:menu="@menu/my_navigation_items" /> 
</android.support.v4.widget.DrawerLayout> 

編輯2: 在你的情況,你可以相對佈局的第一個視圖。

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:fitsSystemWindows="true" 
    android:layout_height="match_parent"> 
    <RelativeLayout 
     android:id="@+id/main_layout" 
     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:layout_width="match_parent" 
     android:layout_height="match_parent" 
     tools:context=".BaseOrderActivity"> 


     <android.support.design.widget.TabLayout 
      android:id="@+id/tab_layout" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="?attr/colorPrimary" 
      android:elevation="6dp" 
      android:minHeight="?attr/actionBarSize" 
      android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> 


     <android.support.v4.view.ViewPager 
      android:id="@+id/pager" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/tab_layout" 
      android:layout_y="50dp" /> 

    </RelativeLayout> 
    <android.support.design.widget.NavigationView 
     android:id="@+id/navigation_view" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     app:menu="@menu/navigation"/> 

</android.support.v4.widget.DrawerLayout> 
+0

thankss,這個佈局是這個問題。 –

0

當你不得不使用switch語句應該在你的每一個case使用break試試這個代碼,而不是

 navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 
     Intent intent; 
     @Override 
     public boolean onNavigationItemSelected(MenuItem menuItem) { 
      switch (menuItem.getItemId()) { 
       case R.id.navi_1: 
        intent= new Intent(BaseOrderActivity.this,BaseOrderActivity.class); 
        intent.putExtra("dataDealerCode",dataorderCode); 
        startActivity(intent); 
        finish(); 
        break; 
       case R.id.navi_2: 
        intent = new Intent(BaseOrderActivity.this,MappingProductRecycler.class); 
        intent.putExtra("dataDealerCode",dataorderCode); 
        startActivity(intent); 
        finish(); 
        break; 
       case R.id.navi_3: 
        intent = new Intent(BaseOrderActivity.this,UpdateProductActivity.class); 
        intent.putExtra("dataDealerCode",dataorderCode); 
        startActivity(intent); 
        finish(); 
        break; 
       case R.id.navi_4: 
        break; 
      } 
      //drawerLayout.closeDrawers(); 
      return true; 
     } 
    }); 
+0

你能解釋一下這是怎麼解決這個問題的?無論如何,開關盒會斷開,並返回「真」。 –

+0

然後問題是不是與開關案件right.is它會在案件內? – Anonymous

+0

從句法上來看,你的代碼和OP的代碼段沒有區別。 –

0

。但是現在您使用內case塊回報

你應該遵循這個步驟,將工作...

  1. 落實navigationView linstner在BaseOrderActivityBaseOrderActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener

  2. 創建菜單在你的menu.xml中

  3. 初始化你NavigationView在Oncreate

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
    navigationView.setNavigationItemSelectedListener(this); 
    
  4. 最後用這個替代方法

    @Override 
        public boolean onCreateOptionsMenu(Menu menu) { 
        getMenuInflater().inflate(R.menu.main_activity, menu); 
         return true; 
        } 
    
        @SuppressWarnings("StatementWithEmptyBody") 
        @Override 
        public boolean onNavigationItemSelected(MenuItem item) { 
         // Handle navigation view item clicks here. 
         int id = item.getItemId(); 
         Intent intent = null; 
         switch (id) { 
          case R.id.navi_1: 
           intent = new Intent(this,BaseOrderActivity.class); 
           intent.putExtra("dataDealerCode",dataorderCode); 
           startActivity(intent); 
           break; 
          case R.id.navi_2: 
           intent = new Intent(this,MappingProductRecycler.class); 
           intent.putExtra("dataDealerCode",dataorderCode); 
           startActivity(intent); 
           break; 
         } 
         DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
         drawer.closeDrawer(GravityCompat.START); 
         return true; 
        } 
    

注意:一旦使用結束那麼你的當前活動/上下文將越來越停止/終止,因此,如果您使用安全的方式

希望它能幫到你..

+0

它不是關於「break」,即使我把斷點和調試onNavigationItemSelected,調試不能在那裏,就像我的選擇沒有觸發 –

+0

謝謝,我更新了我的佈局,也許這種佈局導致這個問題@Raja –

0

試試這個代碼,而不是

int ids=menuItem.getItemId(); 
switch (ids) { 
    case R.id.itemID: 
      //Your Code 
     break 
    default: 
     break; 
} 
drawerLayout.closeDrawers(); 
return true; 
相關問題