android - Kotlin Navigation Drawer 使用带有 RecyclerView 的导航组件作为菜单
问题描述
我的导航抽屉使用导航组件时遇到问题。我自定义了我的抽屉布局并添加了带有 Recycler View 的自定义导航视图。我在 NavigationView 内的 Grid View 中生成了我的自定义布局菜单。
问题是,当我通过单击网格视图中的任何项目进行导航时,它可以导航并且工作正常,但是当我再次单击以导航到另一个片段时,它会出现错误。如果我从主屏幕导航到另一个片段,导航工作正常,但如果我从一个片段导航到另一个片段,则导航不起作用。
main_activity.xml
<?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/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true" >
<GridView
android:id="@+id/gridview"
android:layout_width="match_parent"
android:layout_height="170dp"
android:layout_below="@+id/photoContainer"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:columnWidth="74dp"
android:gravity="center_horizontal|center_vertical"
android:horizontalSpacing="10dp"
android:numColumns="auto_fit"
android:stretchMode="columnWidth"
android:verticalSpacing="10dp" />
</com.google.android.material.navigation.NavigationView>
</androidx.drawerlayout.widget.DrawerLayout>
MainActivity.kt
val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout)
drawerLayout.setScrimColor(Color.TRANSPARENT)
val toggle = ActionBarDrawerToggle(
this,
drawerLayout,
toolbar,
R.string.navigation_drawer_open,
R.string.navigation_drawer_close
)
drawerLayout.addDrawerListener(toggle)
toggle.syncState()
val navView: NavigationView = findViewById(R.id.nav_view)
val width = resources.displayMetrics.widthPixels
val params = nav_view.layoutParams as DrawerLayout.LayoutParams
params.width = width
nav_view.layoutParams = params
val menus = arrayOf("Photo", "Video")
val icon = intArrayOf(
R.drawable.ic_menu_photo,
R.drawable.ic_menu_video)
val iconSelected = intArrayOf(
R.drawable.ic_menu_photo,
R.drawable.ic_menu_video)
menuData = ArrayList<MenuNavigationModel>()
for (i in menus.indices) {
val menu = MenuNavigationModel()
menu.menuName = menus[i]
menu.menuIcon = icon[i]
menuData!!.add(menu)
}
gridView = findViewById(R.id.gridview) as GridView
adapter = MenuNavigationAdapter(this, menuData!!)
gridView!!.adapter = adapter
gridView!!.onItemClickListener = OnItemClickListener { parent, v, i, id ->
try {
if(i === 0)
findNavController(R.id.main_nav_fragment).navigate(R.id.action_homeFragment_to_photoFragment)
if(i === 1)
findNavController(R.id.main_nav_fragment).navigate(R.id.homeFragment_to_videoFragment)
}catch (e: Exception){
Toast.makeText(this, e.message, Toast.LENGTH_SHORT).show()
Log.e("Error_Nav", e.message.toString())
}
val drawer = findViewById(R.id.drawer_layout) as DrawerLayout
drawer.closeDrawer(GravityCompat.START)
}
它返回给我这个错误:从当前目的地目的地找不到导航动作/目的地是的,我知道它说导航中没有提供该动作,但是我如何告诉我的gridview动态处理这个像菜单项一样。请指导执行此操作的更好方法。
解决方案
推荐阅读
- python - 我需要安排一个 Python 脚本在同一目录中打开一个 database.txt
- python - 为什么这些 numpy 操作不等效,我该如何解决?
- pandas - 如何替换熊猫框架中的字符串值
- python - 尝试将数据重铸为从 .csv 浮动
- python - 在 Kivy 中使用 id 更改小部件的属性
- python - 如何更改框架以填充 X 轴而不是依赖于其中的网格
- php - 仅在有变化时才点击 API - 实时比分
- php - Laravel 微风包覆盖现有文件
- django - Django Makemigrations 并迁移成功。开发服务器按预期运行。在 Nginx 上服务时,“关系“auth_user”不存在”
- c - line_find() 如何找到缓存行大小(lmbench3)?