【发布时间】:2019-07-23 11:50:37
【问题描述】:
我有一个带有导航组件的 Activity MVVM 应用程序。当我导航时,一切正常。当旋转发生时,我的应用程序崩溃了,所以我使用了
findNavController().navigate(PermissionsFragmentDirections.Action_permissionsFragment_to_splashFragment())
应用程序崩溃了。然后我改成
findNavController().navigate(R.id.splashFragment)
现在可以了。奇怪,但这只出现在onRequestPermissionsResult。在其他地方我使用它就像在第一个代码示例中一样。
我设法解决了这个问题,但现在当我旋转屏幕时,我又回到了 navigation_graph 的开头。
对于导航,我的activity_home.xml 中有androidx.navigation.fragment.NavHostFragment
所以我的问题是如何在Activity 轮换时保留当前的Fragment?
添加的代码
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Fabric.with(this, Crashlytics())
binding = DataBindingUtil.setContentView(this, R.layout.activity_home)
binding.viewModel = settingsViewModel
binding.lifecycleOwner = this
//small constraintlayout for showing state of app online/offline
constraintLayoutStanje.setOnClickListener {
settingsViewModel.progress()
val id: String = getId(this)
settingsViewModel.settings(id)
}
setObservers()
//all time running task
Handler().postDelayed({
mHandlerTask.run()
}, interval)
}
观察者
fun setObservers() {
//status
settingsViewModel.status.observe(this, Observer {
when (it) {
NacinDelaEnum.ONLINEINT -> this.constraintLayoutStanje.setBackgroundColor(
ContextCompat.getColor(
this,
R.color.greenStat
)
)
NacinDelaEnum.OFFLINE -> this.constraintLayoutStanje.setBackgroundColor(
ContextCompat.getColor(
this,
R.color.redStat
)
)
NacinDelaEnum.ONLINEEXT -> this.constraintLayoutStanje.setBackgroundColor(
ContextCompat.getColor(
this,
R.color.yellowStat
)
)
}
settingsViewModel.doneProgress()
})
//Toast
settingsViewModel.toastMessage.observe(this, Observer {
if (it.isNotEmpty()) {
toast(it)
settingsViewModel.doneToast()
}
})
//progressBar
settingsViewModel.pb.observe(this, Observer {
pb.visible(it)
})
}
NavHostFragment in activity_home.xml
<fragment
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="0dp" app:navGraph="@navigation/nav_graph" app:defaultNavHost="true"
android:id="@+id/mainFragment" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@+id/constraintLayoutStanje"
app:layout_constraintHorizontal_bias="1.0" app:layout_constraintVertical_bias="1.0"/>
我的nav_graph.xml
提前谢谢你
【问题讨论】:
-
导航组件在旋转时保留当前片段,因此问题一定出在您的代码上。在此处发布您的代码。
-
添加了我教的所有内容都会导致问题。
-
解决办法是什么?我有同样的问题。
-
@IgorGanapolsky 没有解决它,因为我们只使用肖像我不想花太多时间解决它。如果你找到解决方案也在这里发布。
-
@Michael Hathi 你确定吗?证据是什么? “导航组件在旋转时保留当前片段,因此问题一定出在您的代码上。”
标签: android kotlin android-jetpack android-architecture-navigation