JetpackNavigation在活动之前初始化片段:因此ui操作崩溃



我将我的项目更新为kotlin 1.5.20和类似的喷气背包导航

implementation "androidx.navigation:navigation-fragment-ktx:2.3.5"
implementation "androidx.navigation:navigation-ui-ktx:2.3.5"

现在我的应用程序崩溃了。原因有点奇怪。在我的startDestination-片段中,我有活动的UI操作。例如,根据最后的分数,片段必须调整标题。所以这不是什么特别的事情。

应用程序崩溃,因为xml无法膨胀:

Caused by: android.view.InflateException: Binary XML file line #83: Error inflating class fragment
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference

将片段包含到活动中是标准代码:

<fragment
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="0dp"
app:defaultNavHost="true"
<!-- ... some- constraint stuff -->
app:navGraph="@navigation/nav_graph" />

我在活动的onCreate和片段的onViewCreated中放置了一条日志消息。我的日志显示了一个奇怪的生命周期:

2021-07-10 17:42:08.097 28021-28021/com.x E/Lifecycle: Create Game Fragment
2021-07-10 17:42:08.141 28021-28021/com.x E/Lifecycle: Create Game Holder Activity

到目前为止,我的假设是活动首先初始化,然后初始化片段。我本以为登录的顺序正好相反。";"修复";非常暴躁。

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
Log.e("Lifecycle", "Create Game Fragment")
lifecycleScope.launch {
// delay(1)
doActivityUIChanges()
}
}

当我使用delay(1)时,一切都正常。当我不使用延迟时,应用程序就会崩溃。

这真的很奇怪。我是否误解了生命周期?我真的很感激另一个解决方案。我的修复不是很干净哈哈

将标记替换为<androidx.fragment.app.FragmentContainerView>原因尚不清楚,但建议根据官方文件进行:https://developer.android.com/guide/navigation/navigation-getting-started

相关内容

最新更新