новое действие не начнется после нажатия на панель навигации - PullRequest
0 голосов
/ 25 августа 2018

Я знаю, что этот вопрос существует, но ответы не работают для моего случая.У меня есть навигационный ящик с четырьмя элементами, но когда я нажимаю на первый (тот, над которым я сейчас работаю), новое созданное мной действие не открывается, я посмотрел и попробовал все, что нашел в Интернетено ничего не работает.Я новичок в Android Studio, поэтому я действительно не знаю, как это исправить.Я использую версию Android Studio 3.0.Это мое меню xml:

<?xml version="1.0" encoding="utf-8"?>
<!--Icons made by http://www.freepik.com
from "https://www.flaticon.com
is licensed by http://creativecommons.org/licenses/by/3.0/-->
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/m1" android:title="Agora Mall"
      android:icon="@drawable/ic_ammunition"/>
<item android:id="@+id/m2" android:title="Downtown Center"
      android:icon="@drawable/ic_ammunition"/>
<item android:id="@+id/m3" android:title="Galeria 360"
      android:icon="@drawable/ic_ammunition"/>
<item android:id="@+id/m4" android:title="Sambil"
      android:icon="@drawable/ic_ammunition"/>
</menu>

Это основной код класса активности:

package com.example.arlet.storemaps;

import android.content.Intent;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.Window;

public class MainActivity extends AppCompatActivity {
private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle mToggle;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer);
    mToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.open,  R.string.close);
    mDrawerLayout.addDrawerListener(mToggle);
    mToggle.syncState();
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if(mToggle.onOptionsItemSelected(item)) {
        return true;
    }

    switch(item.getItemId()){
        case R.id.m1:
            Intent intent = new Intent(MainActivity.this, AgoraActivity.class);
            startActivity(intent);
            return true;
    }

    return super.onOptionsItemSelected(item);
}

}

Ответы [ 3 ]

0 голосов
/ 25 августа 2018

Вы можете обработать элемент навигационного ящика щелчком мыши следующим образом:

navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {

        // This method will trigger on item Click of navigation menu
        @Override
        public boolean onNavigationItemSelected(MenuItem menuItem) {

            //Check to see which item was being clicked and perform appropriate action
            switch (menuItem.getItemId()) {
                //Replacing the main content with ContentFragment Which is our Inbox View;
                case R.id.m1:
                    Intent intent = new  Intent(MainActivity.this, AgoraActivity.class);
                    startActivity(intent);
                    return true;
                    break;
                case R.id.m2:

                    break;
                case R.id.m3:

                    break;
                case R.id.m4:

                    break;

            }


            menuItem.setChecked(true);

            return true;
        }
    });
0 голосов
/ 25 августа 2018

Вы должны реализовать NavigationView.OnNavigationItemSelectedListener, чтобы элементы выдвижного ящика работали идеально

Добавьте это к объявлению вашего класса

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{
// then overide this method to
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {        
        int id = item.getItemId();
        switch(id){
            case R.id.m1:
                Intent intent = new Intent(MainActivity.this, AgoraActivity.class);
                startActivity(intent);
                return true;
            //other cases goes here
        }
        return super.onOptionsItemSelected(item);
    }
    //you might want to ovewrite this method too
    @Override
    public void onBackPressed() {
        if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
            mDrawerLayout.closeDrawer(GravityCompat.START);
        } else {
        super.onBackPressed();
    }
}
0 голосов
/ 25 августа 2018

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

Активность в окне навигации

как тип вашей MainActivity.

...