onNavigationItemSelected在NavigationView中不起作用

时间:2016-09-10 08:46:14

标签: android android-fragments android-navigationview

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

Here是源代码的链接。

8 个答案:

答案 0 :(得分:10)

使用此代码:

navigationView = (NavigationView) findViewById(R.id.navigationView); 
navigationView.bringToFront();

答案 1 :(得分:6)

查看您的MainActivity.java

您已在NavigationView.OnNavigationItemSelectedListener中实施了MainActivity的回调,如下所示,

@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
    // blah blah
}

同时检查setupDrawerContent方法。

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

在此方法中,您将创建一个本地OnNavigationItemSelectedListener

因此,您没有使用OnNavigationItemSelectedListener中已覆盖的MainActivity

解决方案是使用this作为setNavigationItemSelectedListener的参数。通过这样做,您的所有点击都将转到onNavigationItemSelected的{​​{1}},而不是转到本地MainActivity

onNavigationItemSelected

同时将本地private void setupDrawerContent(NavigationView navigationView) { navigationView.setNavigationItemSelectedListener(this); } 中的代码移至onNavigationItemSelected的{​​{1}}。

所以你的onNavigationItemSelected会是这样的,

MainActivity

同时更改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;
}
祝你好运。

答案 2 :(得分:3)

不使用

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

代替它执行此操作

ArrayDeque

答案 3 :(得分:2)

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

navigationView = (NavigationView) findViewById(R.id.navigation_view);        
navigationView.setNavigationItemSelectedListener(this);

你确保你写的相同,否则你的听众将无法工作

答案 4 :(得分:0)

确保已实现接口NavigationView.OnNavigationItemSelectedListener。 第二点,请确保添加这些行,否则listnere将不会被调用。

navigationView=(NavigationView) findviewbyid(R.id.navigation_view);
navigationView.setNavigationItemSelectedListener(this);

答案 5 :(得分:0)

添加这一行
导航视图.bringToFront(); 它对我有用

答案 6 :(得分:0)

使用此代码:

NavigationView navigationView = findViewById(R.id.nav_view); navigationView.setNavigationItemSelectedListener(this);

答案 7 :(得分:-1)

就我而言,我忘记了初始化导航菜单。

请遵循以下代码:

public void initSideMenu() {

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.addDrawerListener(toggle);
    toggle.syncState();

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);
}

快乐的编码...