选择项目时,onNavigationItemSelected 不调用 [英] onNavigationItemSelected not calling when item is selected

查看:25
本文介绍了选择项目时,onNavigationItemSelected 不调用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用以下代码在导航抽屉中添加页脚视图 -

<?xml version="1.0" encoding="utf-8"?>

这是我的活动代码 -

覆盖 fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)val 工具栏:Toolbar = findViewById(R.id.toolbar)setSupportActionBar(工具栏)val navController = findNavController(R.id.nav_host_fragment)draw_menu_body.setNavigationItemSelectedListener(this)nv_top.setNavigationItemSelectedListener(this)appBarConfiguration = AppBarConfiguration(集合(R.id.nav_home,R.id.nav_gallery,R.id.nav_slideshow,R.id.nav_tools,R.id.nav_share,R.id.nav_send), 抽屉布局)setupActionBarWithNavController(navController, appBarConfiguration)draw_menu_body.setupWithNavController(navController)nv_top.setupWithNavController(navController)}覆盖乐趣 onNavigationItemSelected(menu: MenuItem): Boolean {Log.d("testing_navigation","testing_navigation")Drawer_layout.closeDrawer(GravityCompat.START)返回真}

解决方案

您将 setNavigationItemSelectedListenerNavigationView 附加,这将在 setupWithNavController.因此,在配置默认设置后附加您的侦听器.检查下面的代码.

nv_top.setupWithNavController(navController)draw_menu_body.setNavigationItemSelectedListener(this)

更新:要使用默认导航,您必须按如下方式处理:

override fun onNavigationItemSelected(menu: MenuItem): Boolean {val 处理 = NavigationUI.onNavDestinationSelected(menu, navController)如果(!处理){//处理默认以外的其他导航}Drawer_layout.closeDrawer(GravityCompat.START)退货处理}

I am adding footer-view in navigation drawer using following code -

<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <include
        layout="@layout/app_bar_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <com.google.android.material.navigation.NavigationView
        android:id="@+id/nv_top"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="top|start">

        <androidx.core.widget.NestedScrollView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical">
                <include layout="@layout/nav_header_main"/>

                <com.google.android.material.navigation.NavigationView
                    android:id="@+id/drawer_menu_body"
                    app:elevation="0dp"
                    android:layout_height="0dp"
                    android:layout_width="wrap_content"
                    android:layout_weight="1"
                    app:menu="@menu/activity_main_drawer">

                </com.google.android.material.navigation.NavigationView>

                <include layout="@layout/navigation_drawer_bottom_view"/>
            </LinearLayout>

        </androidx.core.widget.NestedScrollView>
    </com.google.android.material.navigation.NavigationView>


</androidx.drawerlayout.widget.DrawerLayout>

But now onNavigationItemSelected() is not calling also navigation drawer keeps open until we slide it manually. I am using navigation-component and nav graph.

This is my activity code -

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    val toolbar: Toolbar = findViewById(R.id.toolbar)
    setSupportActionBar(toolbar)

    val navController = findNavController(R.id.nav_host_fragment)
    drawer_menu_body.setNavigationItemSelectedListener(this)
    nv_top.setNavigationItemSelectedListener(this)

    appBarConfiguration = AppBarConfiguration(
        setOf(
            R.id.nav_home,
            R.id.nav_gallery,
            R.id.nav_slideshow,
            R.id.nav_tools,
            R.id.nav_share,
            R.id.nav_send
        ), drawer_layout)


    setupActionBarWithNavController(navController, appBarConfiguration)
    drawer_menu_body.setupWithNavController(navController)
    nv_top.setupWithNavController(navController)
}

override fun onNavigationItemSelected(menu: MenuItem): Boolean {
    Log.d("testing_navigation","testing_navigation")
    drawer_layout.closeDrawer(GravityCompat.START)
    return true
}

解决方案

You attach setNavigationItemSelectedListener with NavigationView which will override during default configuration of setupWithNavController. So attach your listener after configuring default settings. Check below code.

nv_top.setupWithNavController(navController)
drawer_menu_body.setNavigationItemSelectedListener(this)

Update: To work with default navigation you have to handle like below:

override fun onNavigationItemSelected(menu: MenuItem): Boolean {
    val handled = NavigationUI.onNavDestinationSelected(menu, navController)

    if (!handled) {
        // handle other navigation other than default
    }

    drawer_layout.closeDrawer(GravityCompat.START)

    return handled
}

这篇关于选择项目时,onNavigationItemSelected 不调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆