onNavigationItemSelected在NavigationView中不起作用

Mat*_*ngs 1 android android-fragments android-navigationview

请有人帮我处理导航抽屉中的碎片,由于某种原因我无法让他们工作,所有代码看起来都正确.

是源代码的链接.

Vah*_*deh 18

使用此代码:

navigationView = (NavigationView) findViewById(R.id.navigationView); 
navigationView.bringToFront();
Run Code Online (Sandbox Code Playgroud)


K N*_*Lal 8

看看你的MainActivity.java.

您已实现的回调NavigationView.OnNavigationItemSelectedListenerMainActivity,如下,

@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
    // blah blah
}
Run Code Online (Sandbox Code Playgroud)

还要检查setupDrawerContent方法.

private void setupDrawerContent(NavigationView navigationView) {
    navigationView.setNavigationItemSelectedListener(
            new NavigationView.OnNavigationItemSelectedListener() {
                @Override
                public boolean onNavigationItemSelected(MenuItem menuItem) {
                    menuItem.setChecked(true);
                    drawerLayout.closeDrawers();
                    return true;
                }
            });
}
Run Code Online (Sandbox Code Playgroud)

在这种方法中,您将创建一个本地OnNavigationItemSelectedListener.

所以你没有使用OnNavigationItemSelectedListener你已经覆盖的那个MainActivity.

解决方案是this用作参数setNavigationItemSelectedListener.通过这样做,您所有的点击都将onNavigationItemSelected成为MainActivity而不是去当地onNavigationItemSelected.

private void setupDrawerContent(NavigationView navigationView) {
    navigationView.setNavigationItemSelectedListener(this);
}
Run Code Online (Sandbox Code Playgroud)

此外移动代码在当地onNavigationItemSelectedonNavigationItemSelectedMainActivity.

所以你的onNavigationItemSelected意志是这样的,

@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
    // Handle navigation view item clicks here.
    int id = menuItem.getItemId();
    menuItem.setChecked(true);
    drawerLayout.closeDrawers();

    if (id == R.id.nav_home) {
        // Handle the home action
        Toast.makeText(this, "Home", Toast.LENGTH_SHORT).show();
    } else if (id == R.id.nav_the_wetlands) {
        Toast.makeText(this, "The Wetlands", Toast.LENGTH_SHORT).show();
        TheWetlandsFragment theWetlandsFragment = new TheWetlandsFragment();
        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction().replace(R.id.relativelayout_for_fragment, theWetlandsFragment, theWetlandsFragment.getTag()).commit();
    } else if (id == R.id.nav_the_mistbelt_forests) {
        Toast.makeText(this, "The Mistbelt Forests", Toast.LENGTH_SHORT).show();
    }

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}
Run Code Online (Sandbox Code Playgroud)

同时更改您的activity_main_drawer_view.xml以下内容以解决导航抽屉中的多选问题,

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

    <group android:checkableBehavior="single">
        <item
            android:id="@+id/nav_home"
            android:icon="@drawable/ic_dashboard"
            android:title="Home" />
    </group>

    <item android:title="Information">
        <group android:checkableBehavior="single">
            <item
                android:id="@+id/nav_the_wetlands"
                android:icon="@drawable/ic_event"
                android:title="The Wetlands" />
            <item
                android:id="@+id/nav_the_mistbelt_forests"
                android:icon="@drawable/ic_event"
                android:title="The Mistbelt Forests" />
            <item
                android:id="@+id/nav_the_grasslands"
                android:icon="@drawable/ic_event"
                android:title="The Grasslands" />
        </group>
    </item>

    <item android:title="Quick Go To">
        <group android:checkableBehavior="single">
            <item
                android:id="@+id/nav_accommodation"
                android:icon="@drawable/ic_event"
                android:title="Accommodation" />
            <item
                android:id="@+id/nav_cuisine"
                android:icon="@drawable/ic_forum"
                android:title="Cuisine" />
            <item
                android:id="@+id/nav_leisure_activites"
                android:icon="@drawable/ic_forum"
                android:title="Leisure &amp; Activites" />
            <item
                android:id="@+id/nav_agri_tourism"
                android:icon="@drawable/ic_forum"
                android:title="Agri-tourism" />
            <item
                android:id="@+id/nav_education"
                android:icon="@drawable/ic_forum"
                android:title="Education" />
            <item
                android:id="@+id/nav_arts_crafts_decor"
                android:icon="@drawable/ic_forum"
                android:title="Arts, Crafts &amp; DeCor" />
            <item
                android:id="@+id/nav_selective_shopping"
                android:icon="@drawable/ic_forum"
                android:title="Selective Shopping" />
            <item
                android:id="@+id/nav_for_children"
                android:icon="@drawable/ic_forum"
                android:title="For Children" />
        </group>
    </item>

    <item android:title="Midlands Animals">
        <group android:checkableBehavior="single">
            <item
                android:id="@+id/nav_midlands_birding_checklist"
                android:icon="@drawable/ic_dashboard"
                android:title="Midlands Birding Checklist" />
            <item
                android:id="@+id/nav_midlands_mammals_checklist"
                android:icon="@drawable/ic_dashboard"
                android:title="Midlands Mammals Checklist" />
        </group>
    </item>

</menu>
Run Code Online (Sandbox Code Playgroud)

祝好运.


小智 7

不要使用

NavigationUI.setupWithNavController(navigationView, navController);
Run Code Online (Sandbox Code Playgroud)

而不是这样做

navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                Toast.makeText(MainActivity.this, "clicked", Toast.LENGTH_SHORT).show();
                return false;
            }
        });
Run Code Online (Sandbox Code Playgroud)


小智 6

前段时间我也遇到过同样的问题,最后我意识到我没有写下面代码的第二行

navigationView = (NavigationView) findViewById(R.id.navigation_view);        
navigationView.setNavigationItemSelectedListener(this);
Run Code Online (Sandbox Code Playgroud)

你确保你写的一样,否则你的听众将无法工作