MVVM & Záväzné & Kontext

0

Otázka

Môj kolega a ja som argument. Sme prepočtu aplikácia MVVM+Záväzné. Bolo potrebné spustiť dialógové okno, z fragment. Robím to, ako je tento:

V fragment:

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();
}});

Kolega tiež tvrdí, že potrebujete na to:

V xml súboru napíšeme takto:

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

A v ViewModel:

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

Prosím, povedzte mi, ktorý z nich je správny?

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

Najlepšiu odpoveď

2

ViewModel je zodpovedný za prípravu údajov pre UI, ako je uvedené v Android Developer Sprievodcov.

Preto jednou z najlepších postupov je nikdy vysporiadať s UI prvkov v ViewModel. Hoci kódy bude ešte vykonať, ak sme prejsť Context na ViewModel a nechajte ho zobraziť alertDialogmôžete si tiež uvedomiť, že aktivity/fragment a ViewModel majú odlišný životný cyklus, takže musíte byť opatrní pri absolvovaní Context na ViewModel

Viac rozumný spôsob, ako riešiť tento problém, bude pre ViewModel udržiavať vlajky a pripraviť potrebné správu pomocou LiveData alebo niečo podobné, tak, že aktivita / fragment uvádza, že a vlastne postaviť a ukázať AlertDialog dostať správu od ViewModel, a oznámiť ViewModel keď sa dialógové okno bolo preukázané/klikli, tak, že ViewModel bude spracovávať následné business logiky.

Pre váš konkrétny prípad, ja by som opustiť AlertDialog kód v činnosti/fragment, zatiaľ čo v prípade potreby budem preberať údaje z ViewModel.

2021-11-21 22:45:45

V iných jazykoch

Táto stránka je v iných jazykoch

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