【问题标题】:Jetpack Navigation: On button click show textview text on another screen's textviewJetpack 导航:单击按钮在另一个屏幕的文本视图上显示文本视图文本
【发布时间】:2020-02-23 14:57:00
【问题描述】:

在屏幕 2 上,我有一个按钮,单击该按钮会在 textview 中显示文本(“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】:

    你可以使用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
            })
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-16
      • 1970-01-01
      • 1970-01-01
      • 2016-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-23
      相关资源
      最近更新 更多