2016-12-09 4 views
0

У меня установлен макет с двумя ящиками и я пытаюсь обрабатывать элементы выбора внутри ящиков. Тем не менее, я обнаружил, что ни onNavigationItemSelected, ни onOptionsItemSelected не вызывается, когда я нажимаю что-то в меню (я ставлю оператор журнала прямо внутри функций). Я также не совсем понятен , который должен вызывать.Ни onNavigationItemSelected, ни onOptionsItemSelected называется

EDIT: похоже, onOptionsItemSelected() вызывается в конце концов, но какой бы элемент я нажимаю, я всегда получаю тот же идентификатор. Может быть, это только позволяет мне щелкнуть другой слой?

Есть много других вопросов, подобных этому, но ни один из ответов не помог мне. Я был бы признателен за любое понимание, которое у вас может быть.

Вот соответствующий код внутри моей функции OnCreate() в MainActivity.java:

// 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); 
} 

Вот основной вид activity_mail.xml:

<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" /> 
... 

Главное меню с го е интерактивный значок, чтобы открыть ящик:

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

и вещи внутри ящика (правые один):

<?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 фактически выстреливает, как ожидалось.

Смежные вопросы