gpt4 book ai didi

android - 在 BaseFragment 中使用导航组件

转载 作者:行者123 更新时间:2023-12-02 16:55:14 24 4
gpt4 key购买 nike

在我的应用程序中,我有一个被许多 fragment 使用的 OptionsMenu。因此我创建了以下 BaseFragment:

abstract class BaseFragment : Fragment() {

private lateinit var navController: NavController

protected fun askForPermissions(permissionRequestCode: Int, vararg permissions: String) {
requestPermissions(permissions, permissionRequestCode)
}

protected fun checkPermission(permission: String, activity: Activity): Boolean = when {
Build.VERSION.SDK_INT < Build.VERSION_CODES.M -> true // It is not needed at all as there were no runtime permissions yet
else -> ContextCompat.checkSelfPermission(activity, permission) == PackageManager.PERMISSION_GRANTED
}

override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
inflater!!.inflate(R.menu.menu_topbar, menu)

@SuppressLint("RestrictedApi")
if (menu is MenuBuilder) {
menu.setOptionalIconsVisible(true)
}

super.onCreateOptionsMenu(menu, inflater)
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {
navController = Navigation.findNavController(view!!)

return when (item.itemId) {
R.id.menu_topbar_profile -> {
navController.navigate(actionBaseToProfile())
true
}
R.id.menu_topbar_favorites -> {
navController.navigate(actionBaseToFavorites())
true
}
R.id.menu_topbar_help -> {
navController.navigate(actionBaseToHelp())
true
}
else -> false
}
}

在导航文件中,我添加了 BaseFragment 和目标 fragment 。这是一个 fragment :

    <fragment
android:id="@+id/fragment_base"
android:name="com.test.scanner.base.BaseFragment">

<action
android:id="@+id/action_base_to_profile"
app:destination="@id/fragment_profile" />
</fragment>

<fragment
android:id="@+id/fragment_profile"
android:name="com.test.scanner.ui.profile.ProfileFragment"
tools:layout="@layout/fragment_profile" />

如您所见,我没有为 BaseFragment 定义布局,因为根本没有布局。如果我想通过单击 OptionsMenu 的元素导航到特定屏幕(例如 ProfileFragment),我总是会收到 IllegalArgumentException。这是异常(exception)情况:

java.lang.IllegalArgumentException: navigation destination com.test.scanner.debug:id/action_base_to_profile is unknown to this NavController

我们如何在 BaseFragment 中使用导航组件。这种情况是否有可能,或者是否有其他解决方案?

最佳答案

你在混合东西。不要将 abstract 类放入您的导航图中,而只能将扩展此 BaseFragment 类的类放入您的案例中。我建议您重新开始本教程 navigation-architecture-components完成它后,请尝试阅读有关抽象类的更多信息,然后简化本文中的解决方案。完成后尝试添加菜单但不要将其放入 baseFragment 中,而是将不同的菜单放入每个 fragment 中,对下一个 fragment 只有一个操作。这会更容易。在您全神贯注之后,添加新的东西,例如按钮。

关于android - 在 BaseFragment 中使用导航组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56751429/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com