如果我試圖從底層頁面的對話片段導航到另一個片段,我的應用程式就會崩潰。
我現在在底層對話片段中這樣做:
我現在在底層對話片段中這樣做:
someButton.setOnClickListener { view ->
val action = DestinationFragmentDirections.actionCurrentFragmentToDestinationFragment()
view?.findNavController()?.navigate(action)
}
崩潰日志:
java.lang.IllegalStateException: View androidx.appcompat.widget.AppCompatButton{c44315f VFED..C. ...P.... 44,1189-1036,1321 #7f0a00ff app: id/fragment_book_details_btn_edit}沒有一個NavController set。
at androidx.navigation.Navigation.findNavController(Navigation.java:84)
at androidx.navigation.ViewKt.findNavController(View.kt:28)
at com.bose.bosushree.view.book_details.BookDetailsFragment.setClickListeners$lambda-4$lambda-3(BookDetailsFragment.kt:75)。
at com.bose.bosushree.view.book_details.BookDetailsFragment.lambda$OwDld1VFgq8jsjr6EbpPx5MD4aU(未知來源:0)
at com.bose.bosushree.view.book_details.-$Lambda$BookDetailsFragment$OwDld1VFgq8jsjr6EbpPx5MD4aU.onClick(未知來源:2)
at android.view.View.performClick(View.java:6256)
at android.view.View$PerformClick.run(View.java:24701)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
uj5u.com熱心網友回復:
因此,一個對話片段在不同的視窗中作業,并且不在我們定義的navController的同一視圖層次之下。
在這種情況下,我們需要從navHostFragment中找到我們的navController,然后執行導航:
someButton.setOnClickListener { view ->
val action =
DestinationFragmentDirections.actionCurrentFragmentToDestinationFragment()
val navHostFragment =
requireActivity().supportFragmentManager
.findFragmentById(R.id.nav_host_fragment_container) as NavHostFragment
navHostFragment.navController.navigate(action)
}
uj5u.com熱心網友回復:
根據導航到目的地指南,你可以使用findNavController()擴展在 Fragment 上獲取NavController。這適用于任何型別的Fragment,包括BottomSheetDialogFragment。
someButton.setOnClickListener { view ->
val action = DestinationFragmentDirections.actionCurrentFragmentToDestinationFragment()
findNavController().navigate(action)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/320712.html
標籤:
