2016-12-09 11 views
0

私はダブルドロワーレイアウトを設定しており、ドロワー内のアイテムの選択を処理しようとしています。私はそれをセットアップしている方法で、私はonNavigationItemSelectedもonOptionsItemSelectedもメニュー上の何かをタップすると呼び出されないことがわかります(関数の中にログステートメントを置いています)。私はまた、これらの関数のうちが呼び出されるべきである完全にはっきりしていませんonNavigationItemSelectedもonOptionsItemSelectedも呼び出されていません

EDIT:結局のところonOptionsItemSelected()が呼び出されているようですが、クリックした項目のうち、常に同じIDを取得します。だから、私は他のレイヤーをクリックすることしか許さないのでしょうか?

これに似た疑問がたくさんありますが、答えが役に立たなかったのです。私はあなたが持つ可能性のある洞察に感謝します。正しくないメニューが、呼び出される

// Adding Toolbar to Main screen 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 


    drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.drawer_open, R.string.drawer_close); 
    drawer.addDrawerListener(toggle); 
    toggle.syncState(); 

    NavigationView leftNavigationView = (NavigationView) findViewById(R.id.notifications_view); 
    leftNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 
     @Override 
     public boolean onNavigationItemSelected(MenuItem item) { 
      Log.i("left", "left"); // this is never called 
      // Handle left navigation view item clicks here 
      int id = item.getItemId(); 

      switch(id) { 
       case R.id.emerg_con_menuitem: 
        break; 
       case R.id.ride_hist_menuitem: 
        Log.i("I'm hit", "I'm hit"); 
        intent = new Intent(MainActivity.this, loc_report.class); // The action I want to happen when this menu item is tapped 
        MainActivity.this.startActivity(intent); 
        break; 
       case R.id.settings_menuitem: 
        break; 
      } 

      drawer.closeDrawer(GravityCompat.START); 
      return true; 
     } 
    }); 

    NavigationView rightNavigationView = (NavigationView) findViewById(R.id.nav_view); 
    rightNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 
     @Override 
     public boolean onNavigationItemSelected(MenuItem item) { 
      Log.i("right", "right"); // this is also never called 
      // Handle Right navigation view item clicks here. 
      int id = item.getItemId(); 

      Log.i("I am firing", "I am firing"); 

      switch(id) { 
       case R.id.emerg_con_menuitem: 
        break; 
       case R.id.ride_hist_menuitem: 
        Log.i("I'm hit navigation", "I'm hit navigation"); 
        intent = new Intent(MainActivity.this, loc_report.class); 
        MainActivity.this.startActivity(intent); 
        break; 
       case R.id.settings_menuitem: 
        break; 
      } 

      drawer.closeDrawer(GravityCompat.END); 
      return true; 
     } 
    }); 

    // Adding menu icon to Toolbar 
    ActionBar supportActionBar = getSupportActionBar(); 
    if (supportActionBar != null) { 
     supportActionBar.setHomeAsUpIndicator(R.drawable.ic_notifications); 
     supportActionBar.setDisplayHomeAsUpEnabled(true); 
     supportActionBar.setDisplayShowTitleEnabled(false); 
    } 

とonOptionsItemSelected():

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main_menu, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. 
    Log.i("I'm hit options", "I'm hit options"); // also never called...what is going on?? 
    int id = item.getItemId(); 

    switch(id) { 
     case R.id.emerg_con_menuitem: 
      break; 
     case R.id.ride_hist_menuitem: 
      Log.i("I'm hit options", "I'm hit options"); 
      Intent intent = new Intent(MainActivity.this, loc_report.class); 
      this.startActivity(intent); 
      break; 
     case R.id.settings_menuitem: 
      break; 
     case R.id.menu_navigation: 
      drawer.openDrawer(GravityCompat.END); /*Opens the Right Drawer*/ 
      return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 
ここ

はMainActivity.javaの私のonCreate()関数内の関連するコードです。目と

<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/drawer_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:fitsSystemWindows="true" 
android:background="@drawable/main_background" 
style="@style/Theme.AppCompat.DayNight"> 

<android.support.design.widget.CoordinatorLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/main_content" 
    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:theme="@style/Protectors" 
     app:elevation="0dp"> 

     <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/Protectors" 
      android:textAlignment="center"> 

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

    </android.support.design.widget.AppBarLayout> 
</android.support.design.widget.CoordinatorLayout> 
<android.support.design.widget.NavigationView 
    android:id="@+id/nav_view" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_gravity="end" 
    android:fitsSystemWindows="true" 
    app:headerLayout="@layout/navheader" 
    app:menu="@menu/menu_navigation" /> 

<android.support.design.widget.NavigationView 
    android:id="@+id/notifications_view" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    android:fitsSystemWindows="true" 
    app:headerLayout="@layout/navheader" 
    app:menu="@menu/notifications" /> 
... 

メインメニュー:ここ

は、メインビューactivity_mail.xmlあります引き出しを開くには、電子のクリック可能なアイコン:

<?xml version="1.0" encoding="utf-8"?> 
<menu 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" 
    tools:context=".MainActivity"> 

    <group android:checkableBehavior="single"> 

     <item // this is the item that's being called on a click 
      android:id="@+id/menu_navigation" 
      android:icon="@drawable/ic_menu" 
      android:title="@string/action_notifications" 
      android:orderInCategory="100" 
      app:showAsAction="always" /> 

    </group> 
</menu> 

とか引き出し(右手1)内部:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:id="@+id/emerg_con_menuitem" 
     android:title="Emergency Contacts" 
     /> 
    <item 
     android:id="@+id/ride_hist_menuitem" 
     android:title="Ride History" /> 
    <item 
     android:id="@+id/settings_menuitem" 
     android:title="Settings" /> 
</menu> 

答えて

0

[OK]を、私はこれを考え出したと思います。私はまだ右の引き出しのリンクに問題がありますが、私は仕事のために左の引き出しのリンクを持っています。レイヤリングの問題だったので、メインメニューの項目の代わりにmain_menu項目をクリックしていました(これは、ドロワを開くためのクリック可能なアイコンが含まれています)。この問題を解決するために、私は順序を修正するためのコード行を追加:

NavigationView leftNavigationView = (NavigationView) findViewById(R.id.nav_view); 
leftNavigationView.bringToFront(); // <- added this line 

そして予想通り、その後OnNavigationItemSelectedListenerが実際に起動します。

関連する問題