Меню Android с ActionBarDrawerToggle

У меня есть простая задача:

Создайте меню с несколькими пунктами, которое открывается на кнопке переключателя.

Моя активность_основа:

<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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.mt.gmtelandroid.MainActivity"
android:id="@+id/drawer_layout">



<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</LinearLayout>

<android.support.design.widget.NavigationView
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    app:menu="@menu/navigation_menu"
    android:layout_gravity="start"
    app:headerLayout="@layout/navigation_header"
    >

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

и меню навигации

<menu xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/meni1" >
<item android:id="@+id/navhome"
    android:title="Home"
    android:icon="@mipmap/ic_home_black_24dp"
    >
</item>
<item android:id="@+id/navtasks" android:title="Zadaci"
    android:icon="@mipmap/ic_drive_eta_black_24dp"
    ></item>
<item android:id="@+id/navlogout" android:title="Odjava"
    android:icon="@mipmap/ic_close_black_24dp">
</item>
<item android:id="@+id/myname" android:title="Moj Nalog"
    android:icon="@mipmap/ic_account_circle_black_24dp">
</item>

Основная деятельность

   public class MainActivity extends AppCompatActivity
{

    private DrawerLayout mDrawerLayout;
    private ActionBarDrawerToggle mtogle;

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

        mDrawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
        mtogle = new ActionBarDrawerToggle(this, mDrawerLayout,R.string.open_menu, R.string.close_menu);

        mDrawerLayout.addDrawerListener(mtogle);
        mtogle.syncState();

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {


        if (mtogle.onOptionsItemSelected(item))
        {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

Я не знаю, как добавить слушателя onMenuItemClick, чтобы я мог обрабатывать то, что происходит, когда пользователь нажимает на элемент меню. Я попытался добавить некоторый код в метод onOptionsItemSelected, но когда я отлаживал его, я обнаружил, что этот метод вызывается только при переключении, но не при нажатии на пункт меню!?

2 ответа

Решение

Вы должны реализовать обратные вызовы для NavigationView.OnNavigationItemSelectedListener в Activity как показано ниже,

public class HomeActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener

чем обрабатывать событие клика NavigationView как ниже код

@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();
        Intent i;

         if (id == R.id.navhome) {
            // perform your action here
         } else if (id == R.id.navtasks) {                    
            // perform your action here
         } else if (id == R.id.navlogout) {
            // perform your action here
         }else if (id == R.id.myname) {
            // perform your action here
         }
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
}

Попробуйте добавить:

обратный вызов реализует NavigationView.OnNavigationItemSelectedListener, он переопределит onNavigationItemSelected(элемент MenuItem) {... }. Вы можете поместить свой код клика здесь с помощью item.getItemId ().

Я надеюсь, это поможет вам.

Другие вопросы по тегам