2

在两个片段上使用导航组件,我的应用程序当前在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)
    }

表单片段:

(我要保存进度并添加到后台堆栈的片段)

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)

    }

}

提前感谢您的帮助!

4

1 回答 1

2

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

在片段中:

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

创建这个类:

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

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

 val data = navGraphScopedViewModel.sharedData

我希望我对你有所帮助

于 2020-11-04T20:56:16.383 回答