onNavigationItemSelected не вызывается - PullRequest
0 голосов
/ 01 мая 2020

Я новичок в Android. Я создал Activity Navigation Drawer, используя шаблон по умолчанию для проекта Navigation Drawer Activity. Это работает правильно. Теперь мне нужно изменить список меню ящика и добавить новые элементы. Я добавил один элемент в activity_main_drawer. xml следующим образом, он правильно отображается

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:showIn="navigation_view">

<group android:checkableBehavior="single">
    <item
        android:id="@+id/nav_home"
        android:icon="@drawable/ic_menu_camera"
        android:title="@string/menu_home" />
    <item
        android:id="@+id/nav_gallery"
        android:icon="@drawable/ic_menu_gallery"
        android:title="@string/menu_gallery" />
    <item
        android:id="@+id/nav_slideshow"
        android:icon="@drawable/ic_menu_slideshow"
        android:title="@string/menu_slideshow" />
    <item
        android:id="@+id/nav_others"
        android:icon="@drawable/ic_menu_slideshow"
        android:title="Others" />
   </group>
</menu>

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

Код основной активности по умолчанию следующий:

    public class MainActivity extends AppCompatActivity  implements 
       NavigationView.OnNavigationItemSelectedListener {

    private AppBarConfiguration mAppBarConfiguration;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        FloatingActionButton fab = findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
        DrawerLayout drawer = findViewById(R.id.drawer_layout);
        NavigationView navigationView = findViewById(R.id.nav_view);
        // Passing each menu ID as a set of Ids because each
        // menu should be considered as top level destinations.


        mAppBarConfiguration = new AppBarConfiguration.Builder(
                R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow,R.id.nav_others)
                .setDrawerLayout(drawer)
                .build();

        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);//.
        NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
        NavigationUI.setupWithNavController(navigationView, navController);
    }

    @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);
        return true;
    }

    @Override
    public boolean onSupportNavigateUp() {
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
        return NavigationUI.navigateUp(navController, mAppBarConfiguration)
                || super.onSupportNavigateUp();
    }
}

Я добавил onNavigationItemSelected, как показано ниже, но он также не работает ,

    @Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {

    int id = item.getItemId();

    if (id == R.id.nav_others) {
        Toast.makeText(MainActivity.this,id,Toast.LENGTH_LONG).show();
    }
    return true;
}

1 Ответ

1 голос
/ 01 мая 2020

В вашей основной деятельности после нахождения вашего вида:

navigationView.setNavigationOnItemSelected(this)
...