Jetpack Navigation: при нажатии кнопки показать текстовый вид текста в текстовом виде на другом экране - PullRequest
1 голос
/ 23 февраля 2020

На экране 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)

1 Ответ

0 голосов
/ 01 марта 2020

Вы можете использовать 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
        })
    }
}
...