伙计们,我需要你们的帮助。
我使用 android 导航组件,想要在用户按下按钮后保存 backstack 并在之后恢复它。我找到了2个方法
navController.saveState(): Bundle
和navController.restoreState(bundle: Bundle)
。
但我在使用它时遇到问题。看起来 saveState 工作得很好(我看到了包和里面的 backstack),但我不明白如何使用 RestoreState,因为文档说:
从包中恢复所有导航控制器状态。这应该在调用 setGraph 之前调用。
https://developer.android.com/reference/kotlin/androidx/navigation/NavController#restorestate
好吧,我做到了,似乎后退堆栈已恢复,但在屏幕上我看到第一个片段(而不是我保存时的片段)。我做错了什么?
代码:
第一个片段
private val TAG = this::class.java.name
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_first, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
btn_forward.setOnClickListener { findNavController().navigate(R.id.action_firstFragment_to_secondFragment) }
btn_back.setOnClickListener { requireActivity().onBackPressed() }
}
}
Run Code Online (Sandbox Code Playgroud)
第二个片段
class SecondFragment : Fragment() {
private val TAG …
Run Code Online (Sandbox Code Playgroud)