Как общаться из Фрагмента в ViewModel? - PullRequest
1 голос
/ 06 января 2020

В настоящее время у меня есть интерфейс, реализованный в MainActivity , который позволяет осуществлять связь с NumberFragment . onCountClicked - это метод NumberFragment , который получает идентификатор щелчка элемента.

Вопрос

Как я могу отправлять позицию onCountClicked в NumberFragmentViewModel при каждом нажатии элемента?

Примечание. Использование привязки данных и повторного просмотра

Основная деятельность

  val newFragment = NumberFragment()
                 val args = Bundle()
                 args.putInt(NumberFragment().onCountClicked(data).toString(),data.toInt())

                newFragment.arguments = args

Фрагмент номера

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                              savedInstanceState: Bundle?): View? {
 val sleepTrackerViewModel =
            ViewModelProviders.of(
                    this, viewModelFactory).get(NumberViewModel::class.java)

    setHasOptionsMenu(true)

    binding.setLifecycleOwner(this)

    binding.sleepTrackerViewModel = sleepTrackerViewModel

    //Observes for any changes on database and updates the UI
    sleepTrackerViewModel.dbCount.observe(this, Observer {dbCount ->
        dbView.text = dbCount.number.toString()
    })
    return binding.root
}

   fun onCountClicked(position: Long) {
        Log.i("NumberF" , "------------->" + position)
    }

1 Ответ

1 голос
/ 06 января 2020

Вы можете просто создать метод в viewModel, который получает эту позицию и обновляет значение живых данных. Я бы сделал это так:

private val _idItemClicked = MutableLiveData<Int>()
val idItemClicked: LiveData<Int> = _idItemClicked

fun setIdItemClicked(id: Int) {
   _idItemClicked.value = id
}

Теперь вы вызываете функцию setIdItemClicked , чтобы установить новое значение.

...