【问题标题】:onNavigationItemSelected is not getting calledonNavigationItemSelected 没有被调用
【发布时间】:2020-05-01 23:45:15
【问题描述】:

我是 Android 的初学者。我已经使用 Navigation Drawer Activity 项目的默认模板创建了 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 (正如我在不同的文档中发现的那样)。我无法知道它们(片段)是如何被调用的。

MainActivity默认代码如下:

    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;
}

【问题讨论】:

    标签: java android navigation-drawer


    【解决方案1】:

    找到视图后在 MainActivity 中:

    navigationView.setNavigationOnItemSelected(this)
    

    【讨论】:

    • 首先谢谢你。是的,我已经插入了代码,但它也无法正常工作。
    • @Santanu 您正在使用覆盖整个功能的 Android 导航组件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多