長話短說,我是 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;
還是直接使用靜態方法更多的是風格問題——兩者都有效)
添加回答
舉報
0/150
提交
取消