MVVM a Vazby A Souvislosti

0

Otázka

Můj kolega a já jsme se pohádali. Jsme překládat aplikaci MVVM+Vázání. Bylo potřeba začít dialog z fragmentu. Dělám to takhle:

Ve fragmentu:

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 také tvrdí, že je třeba udělat toto:

V xml souboru můžeme napsat 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, řekněte mi, který z nich je správný?

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

Nejlepší odpověď

2

ViewModel je odpovědná za přípravu dat pro UI, jak bylo uvedeno v Android Developer Průvodců.

Proto nejlepší praxe je nikdy se vypořádat s prvky uživatelského ROZHRANÍ v ViewModel. I když kódů bude stále spustit, pokud jsme se projít Context ViewModel a nechte ji ukázat alertDialogmůžete také muset být vědomi toho, že aktivity/fragment a ViewModel mají různé životní cykly, takže musíte být opatrní, když kolem Context ViewModel

Více rozumný způsob, jak to zvládnout, by bylo pro ViewModel k udržení vlajky a připravit požadované zprávy pomocí LiveData nebo něco podobného, takže to, že činnost / fragment uvádí, že, a vlastně postavit a ukázat AlertDialog tím, že se na zprávu z ViewModel, a oznámí ViewModel, když okno bylo prokázáno, že/klikl, tak, že ViewModel se postará o následné obchodní logiky.

Pro váš konkrétní případ bych opustit AlertDialog kód v činnosti/fragment, zatímco pokud bude třeba, budu-li načíst data z ViewModel.

2021-11-21 22:45:45

V jiných jazycích

Tato stránka je v jiných jazycích

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