MVVM & Obligatoriu & Context

0

Problema

Colegul meu și cu mine ne-am certat. Suntem traducerea potrivită pentru MVVM+Obligatoriu. Nu a fost nevoie pentru a începe un dialog dintr-un fragment. Eu o fac astfel:

În fragmentul:

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 coleg, de asemenea, susține că aveți nevoie pentru a face acest lucru:

În fișierul xml vom scrie după cum urmează:

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

Și în ViewModel:

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

Te rog, spune-mi, care este corect?

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

Cel mai bun răspuns

2

ViewModel este responsabil pentru pregătirea datelor pentru UI, așa cum este menționat în Android Developer Ghiduri.

Prin urmare, o bună practică este niciodată de a face cu elemente de UI în ViewModel. Deși codurile vor executa în continuare, dacă vom trece la Context pentru a ViewModel și lăsați-l să arate o alertDialog, puteți, de asemenea nevoie să fie conștienți de faptul că activitatea/fragment și ViewModel au diferite cicluri de viață, așa că trebuie să fie atenți atunci când trece Context pentru a ViewModel

O mult mai sensibil mod de a rezolva acest lucru, ar fi pentru ViewModel pentru a menține un steag și să se pregătească necesare mesaj folosind LiveData sau ceva asemănător, așa că activitatea / fragment observă că și de a construi de fapt, și arată un AlertDialog prin obtinerea mesaj de la ViewModel, și să notifice ViewModel când dialogul a fost prezentat/apasat, astfel încât ViewModel se va ocupa ulterior de logica de afaceri.

Pentru cazul dumneavoastră particular, aș pleca AlertDialog codul în activitate/fragment, în timp ce dacă va fi necesar, voi prelua datele din ViewModel.

2021-11-21 22:45:45

În alte limbi

Această pagină este în alte limbi

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