Jetpack导航:在按钮上单击以在另一屏幕的文本视图上显示文本视图文本

问题描述 投票:1回答:1

在屏幕2上,我有一个按钮,单击该按钮可在文本视图中显示文本(“ MON”)。我还希望用户选择的那一天显示在另一个屏幕上(屏幕4),而不是导航菜单中的下一个屏幕,而是随后的一个屏幕。因此,如果用户通过单击屏幕2上的按钮选择星期一,星期三和星期五的日子,我希望这些日子出现在该屏幕上,然后又出现在屏幕4上。屏幕2,但不在屏幕4上。我该如何解决?

private fun onButtonClicked() {
        when {
            select_day_mon_img_btn.setOnClickListener {
                select_day_mon_word_txt.text = resources.getString(R.string.mon)
                home_day_word_txt.text = getString(R.string.mon)
                home_day_word_txt.setOnClickListener {
                    view?.findNavController()?.navigate(
                        R.id.action_selectDaysFragment_to_homeFragment)
android kotlin navigation android-jetpack
1个回答
0
投票

您可以使用SharedViewModel

class SharedViewModel : ViewModel() {
    val selected = MutableLiveData<String>()

    fun select(day: String) {
        selected.value = day
    }
}

在第二个屏幕上将所选日期传递到视图模型中

class Screen2 : Fragment() {


    // Use the 'by activityViewModels()' Kotlin property delegate
    // from the fragment-ktx artifact
    private val model: SharedViewModel by activityViewModels()

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        home_day_word_txt.setOnClickListener {
            model.select(getString(R.string.mon))
            view?.findNavController()?.navigate(
                    R.id.action_selectDaysFragment_to_homeFragment)
        }
    }
}

在第四个屏幕上

class Screen4 : Fragment() {

    // Use the 'by activityViewModels()' Kotlin property delegate
    // from the fragment-ktx artifact
    private val model: SharedViewModel by activityViewModels()

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        model.selected.observe(viewLifecycleOwner, Observer<String> { day ->
                // Update the UI
                textView.text = day
        })
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.