Generalidades

Cómo obtener el ViewModel de actividad o Fragmento de diferentes ciclos de vida | por Cai Shanglin | Diciembre de 2021

Cai Shanglin

Traducir a través de Google

val mainViewModel by lazy { ViewModelProvider(this).get(MainViewModel::class.java) }

Hay alrededor de cuatro ViewModels de uso común en Fragment

/代表Fragment自己的生命週期
val viewModel by lazy { ViewModelProvider(this).get(MainViewModel::class.java) }
//代表父層Activity的生命週期
val viewModel by lazy { ViewModelProvider(requireActivity()).get(MainViewModel::class.java) }
//代表父層Fragment的生命週期
val viewModel by lazy { ViewModelProvider(requireParentFragment()).get(MainViewModel::class.java) }
//代表某個Fragment的生命週期
val viewModel by lazy{ViewModelProvider(requireActivity().supportFragmentManager.findFragmentByTag(“TAG”)!!).get(MainViewModel::class.java)}

Si MainViewModel sale a través de esta nueva actividad

val mainViewModel by lazy {ViewModelProvider(this).get(MainViewModel::class.java) }

Establecer diferentes ciclos de vida en Fragment new MainViewModel

Actividad: esto, fragmento: esto

hashCode es diferente

Actividad: Este, fragmento:Necesita actividad ()

hashCode es el mismo

Actividad

val mainViewModel by lazy { ViewModelProvider(this).get(MainViewModel::class.java) }mainViewModel.jumpLiveData.observe(this, {
when (it) { 0 ->
{//do switch Fragment}
}
}
)

Retazo

val mainViewModel by lazy { ViewModelProvider(requireActivity()).get(MainViewModel::class.java)}mainViewModel.jumpFragment(0)

IndexFragment Haga clic para saltar a un IndexFragment

Retazo

val fragmentViewModel by lazy { ViewModelProvider(this).get(AFragmentViewModel::class.java) }class AFragmentViewModel : ViewModel() {private val mSwitchPageLiveData = MutableLiveData()val switchPageLiveData: LiveData = mSwitchPageLiveDatafun switchPage(position: Int) {mSwitchPageLiveData.value = position}}private lateinit var viewPager: ViewPager2private lateinit var adapter: FragmentStateAdapteroverride fun onViewCreated(view: View, savedInstanceState: Bundle?) {super.onViewCreated(view, savedInstanceState)viewPager = view.findViewById(R.id.viewPager)adapter = object : FragmentStateAdapter(this) {override fun getItemCount(): Int = 3override fun createFragment(position: Int): Fragment {return IndexFragment.newInstance(“$position”)}}viewPager.adapter = adapterfragmentViewModel.switchPageLiveData.observe(viewLifecycleOwner,{viewPager.setCurrentItem(it)})}

Fragmento de índice

private val parentFragment by lazy { ViewModelProvider(requireParentFragment()).get(AFragmentViewModel::class.java) }Orprivate val parentFragment by lazy { ViewModelProvider(requireActivity().supportFragmentManager.findFragmentByTag(AFragment.TAG)!!).get(AFragmentViewModel::class.java) }override fun onViewCreated(view: View, savedInstanceState: Bundle?) {super.onViewCreated(view, savedInstanceState)parentFragment.switchPage(position)}

LEER  ¿Tenemos que apagar el WiFi cuando no lo estamos usando?

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba