繁体   English   中英

带有导航组件的 backstack

[英]backstack with navigation component

在两个片段上使用导航组件,我的应用程序当前在调用navigateUp()时销毁一个片段(使用setupActionBarWithNavController() ),因此当我输入已删除的片段时,所有进度都丢失了,我正在尝试更改我添加的片段到一个后台堆栈(只有一个片段实例),但我一直在努力解决这个问题......

这是一些代码:

主要活动:

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        loginRepository = LoginRepository()
        if (!loginRepository.checkLoggedInState()) {
            goToLoginActivity()
        }

        Log.d("FirebaseMain", "onCreate: ${loginRepository.checkLoggedInState()}")

        //MyApplication.app.currentUser
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)

        navController = Navigation.findNavController(this, R.id.nav_host_fragment)

        // setup custom action bar
        setSupportActionBar(findViewById(R.id.toolbar))

        // adds a return button in the ActionBar.
        NavigationUI.setupActionBarWithNavController(this, navController)
    }

表单片段:

(我想保存它的进度并添加到 backstack 的片段)

class FormFragment : Fragment() {

    private lateinit var binding: FragmentFormBinding

    private val checkListRecyclerAdapter = CheckListRecyclerAdapter(
        hashMapOf(
            0 to "mirrors",
            1 to "blinkers1",
            2 to "blinkers11",
            3 to "blin4kers",
            4 to "blink3e1123rs",
            5 to "blink6ers",
            6 to "blin53kers",
            7 to "blin8kers",
            8 to "blin7kers",
            9 to "blin43kers",
            10 to "blin32kers",
            11 to "blin322kers",

            )
    )

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {

        binding = DataBindingUtil.inflate(inflater, R.layout.fragment_form, container, false)

        binding.rvCheckList.apply {
            // this is used to load the data sequentially from top to bottom,
            this.layoutManager = LinearLayoutManager(context)

            // the adapter that loads the data into the list
            this.adapter = checkListRecyclerAdapter
        }

        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

    }

}

在此先感谢您的帮助!

我一直在努力解决类似的问题。 导航组件中的片段不会保持其状态。 如果您在导航时保持数据进度,则需要创建一个范围为导航图的 SharedViewModel。

在片段中:

private val navGraphScopedViewModel by navGraphViewModels<NavGraphViewModel>(R.id.your_nav_graph)

创建这个类:

class NavGraphViewModel : ViewModel() {
    var sharedData=  CustomObject()
}

您可以从所有片段中访问和设置数据:

 val data = navGraphScopedViewModel.sharedData

我希望我帮助了你

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM