MVVM & Bağlama & Bağlam

0

Soru

Meslektaşımla tartıştık. Uygulamayı MVVM + Bağlamasına çeviriyoruz. Bir parçadan bir diyalog başlatmaya ihtiyaç vardı. Şöyle yaparım; :

Parçada:

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

Bir meslektaşım da bunu yapmanız gerektiğini iddia ediyor:

Xml dosyasında aşağıdaki gibi yazıyoruz:

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

Ve Viewmodel'de:

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

Lütfen söyle bana, hangisi doğru?

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

En iyi cevabı

2

ViewModel, Android Geliştirici Kılavuzlarında belirtildiği gibi UI için veri hazırlamaktan sorumludur.

Bu nedenle, en iyi uygulamalardan biri asla Viewmodel'deki UI öğeleriyle uğraşmamaktır. Eğer geçersek kodları hala idam edecek olsa da Context viewmodel'e ve göstermesine izin ver alertDialog ayrıca, etkinlik / parçanın ve viewmodel'in farklı yaşam döngülerine sahip olduğunun farkında olmanız gerekebilir, bu nedenle geçerken dikkatli olmanız gerekir. Context ViewModel için

Bunu ele almanın daha mantıklı bir yolu, Viewmodel'in bir bayrak tutması ve gerekli mesajı kullanarak hazırlaması olacaktır LiveData ya da benzer bir şey, böylece etkinlik / parça bunu gözlemler ve aslında bir yapı oluşturur ve gösterir. AlertDialog iletiyi Viewmodel'den alarak ve iletişim kutusu gösterildiğinde/tıklatıldığında Viewmodel'e bildirerek Viewmodel'in sonraki iş mantığını işlemesini sağlayın.

Çoğu durumda, başbaşa bırakmak istediğim AlertDialog etkinlik/parçadaki kod, gerekirse verileri Viewmodel'den alacağım.

2021-11-21 22:45:45

Diğer dillerde

Bu sayfa diğer dillerde

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