MVVM y Vinculantes y Contexto

0

Pregunta

Mi colega y yo tuvimos una discusión. Estamos traduciendo la aplicación a MVVM+Vinculante. Era necesario iniciar un diálogo a partir de un fragmento. Yo lo hago así:

En el fragmento:

fragmentBinding.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
       // there's a bunch of code here 
     alertDialog.show();
}});

Un colega también afirma que usted necesita hacer esto:

En el archivo xml podemos escribir de la siguiente manera:

android:onClick="@{v -> viewModel.showDialog(context)}"

Y en el ViewModel:

fun showDialog(context: Context){
     AlertDialog.Builder builder = new AlertDialog.Builder(context);
       // there's a bunch of code here
     alertDialog.show();
}

Por favor, dime, żcuál es la correcta?

android binding mvvm
2021-11-21 22:26:10
1

Mejor respuesta

2

ViewModel es responsable de la preparación de los datos para la interfaz de usuario, como se mencionó en el desarrollo de Android Guías.

Por lo tanto, una mejor práctica es nunca tratar con elementos de interfaz de usuario en el ViewModel. Aunque los códigos que se va a ejecutar si se pasa el Context para el ViewModel y permitir que se muestre un alertDialogusted puede también deben ser conscientes de que la actividad o fragmento y el ViewModel tienen diferentes ciclos de vida, por lo que deberá tener cuidado al pasar el Context para el ViewModel

La forma más sensata de manejar esto sería para el ViewModel para mantener una bandera y preparar el mensaje requerido el uso de LiveData o algo similar, para que la actividad / fragmento se observa que y crear y mostrar una AlertDialog llevando el mensaje de la ViewModel, y notificar a la ViewModel cuando el diálogo se ha demostrado/clic, para que el ViewModel se encargará de la posterior de la lógica de negocio.

Para su caso en particular, me gustaría dejar el AlertDialog código de la actividad/fragmento, mientras que si es necesario voy a recuperar los datos desde el ViewModel.

2021-11-21 22:45:45

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................