为了账号安全,请及时绑定邮箱和手机立即绑定

将 Kotlin MainActivity 移植到 Java 时出现侧面和底部导航问题

将 Kotlin MainActivity 移植到 Java 时出现侧面和底部导航问题

动漫人物 2023-02-16 17:05:10
长话短说,我是 Android 环境的新手,在尝试学习 Android 和 Kotlin 的过程中,我已经忍不住咬牙切齿了。我在 Kotlin 中创建了我的 UI 控制器,并使用 Google 示例代码来执行片段导航。完成这个之后,我发现用 Java 编写我的后端程序对我自己来说更有效率。不想在同一个应用程序中处理两种语言,我成功地将所有 UI 控制器从 Kotlin 移植到 Java。但是,我被困在我的 MainActivity 类上。下面是 Kotlin 版本,两个 XML 布局文件,以及我对 MainActivity 的 Java 版本的尝试。混淆是关于 onCreate() 中的两个方法调用 setupBottomNavMenu() 和 setupNavigation Menu()。BottomNavigationView 类似乎没有 Kotlin 中的方法 setupWithNavController(NavController navController)。我能找到的最接近的是 setupWithNavController(BottomNavigationView bottomNavigationView, NavController navController)。如果我选择这个,并注释掉对 setupNavigation Menu() 的调用,应用程序将以纵向模式运行,但当我倾斜手机(横向模式)时崩溃。NavigationView 类也不提供像 Kotlin 版本中那样采用 NavController 类型的单个参数的方法。我再次选择了类似的方法 setupWithNavController(NavigationView navigationView, NavController navController),但是我的应用程序在启动时崩溃了。有人可以帮我解释一下吗?此刻我正在转动我的轮子试图了解发生了什么。我的导航 Gradle 导入是:def nav_version = "2.1.0-alpha03"implementation "androidx.navigation:navigation-fragment:$nav_version" // For Kotlin use navigation-fragment-ktximplementation "androidx.navigation:navigation-ui:$nav_version" // For Kotlin use navigation-ui-ktx
查看完整描述

1 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

语法?.elvis 运算符,它仅在对象不为空时运行以下表达式。

因此,这样的调用bottomNav?.setupWithNavController(navController)分为两个部分:一个 elvis 运算符和一个Kotlin 扩展函数(一个静态方法,看起来就像是另一个类上的方法)。

等效的 Java 代码需要做这两件事才能等效:

if (bottomNav != null) {
    NavigationUI.setupWithNavController(bottomNav, navController);
}

(选择是直接使用import static androidx.navigation.ui.NavigationUI.setupWithNavController;还是直接使用静态方法更多的是风格问题——两者都有效)


查看完整回答
反对 回复 2023-02-16
  • 1 回答
  • 0 关注
  • 89 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号