Kotlin - Передача аргументов через фрагменты - PullRequest
0 голосов
/ 14 июля 2020

У меня проблема с моим приложением. Он имеет 3 фрагмента (F1 + F2 + F3)

В F1 (получает список с x номерами видов спорта), и пользователь должен выбрать один (для представления данных используется RecyclerView). На F2 (получает список оборудования), и пользователь должен выбрать оборудование (также используется RecyclerView). На F3 я хочу возобновить выбор пользователей. Я пытался использовать ShareViewModel, но каждый раз, когда я пытался использовать это, он отображается как null в F3.

Как лучше всего передать эти аргументы ??! SharedViewModel вы используете SafeArgs ?! Я пробовал использовать SharedViewModel.

Имейте в виду, что следующий код не был скопирован из студии android, он может содержать некоторые ошибки выполнения.

   override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.itemview.text=listsports[position]

        holder.itemview.setOnClickListener{
    
        val sViewModel=SharedViewModel()
    
        sViewModel.setSport(adapterposition)
    
        v:View->v.findNavcontroller().navigate(R.id.action_F1_to_F2)}
    }
}

А ShareViewModel выглядит как:

class SharedViewModel():ViewModel(){

var selectSport= MutableLiveData<String>
val _selectSports=LiveData<String>
get()=selectSport


fun setSport(index:Int)
{
    selectSport.value=listsports[position].toString()
}

}

1 Ответ

0 голосов
/ 14 июля 2020

вместо использования:

val sViewModel=SharedViewModel()

попробуйте использовать:

val sViewModel: SharedViewModel by activityViewModels()

в каждом из ваших фрагментов

cf: документация https://developer.android.com/topic/libraries/architecture/viewmodel

...