MVVM&ผูกมัดหรอ&คอนเท็กซ์

0

คำถาม

เพื่อนร่วมงานของผมและผมเถียงกันอยู่นะ เรากำลังแปลโปรแกรมที่จะ MVVM+ผูกมัดหรอ. มันต้องการจะเริ่มเป็นกล่องโต้ตอบจากเป็นชิ้นส่วน ฉันทำมันเหมือนนี้:

อยู่ในชิ้นส่วน:

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

เป็นเพื่อนร่วมงานคนยังอ้างว่าคุณต้องทำอย่างนี้:

ในแฟ้ม xml เราเขียนตาม:

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

และใน ViewModel:

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

ได้โปรดบอกฉันซึ่งหนึ่งคือคำตอบที่ถูกต้อง?

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

คำตอบที่ดีที่สุด

2

ViewModel ต้องรับผิดชอบต่อสิ่งที่กำลังเตรียมข้อมูลสำหรับส่วนติดต่อผู้ใช้ของที่พูดตอนอยู่ที่ Android ผู้พัฒนานนำ.

ดังนั้นคนที่ดีที่สุดที่ฝึกซ้อมไม่เคยที่จะจัดการกับส่วนติดต่อผู้ใช้ส่วนประกอบใน ViewModel. ถึงแม้คนรหัสจะยังคงเรียกประมวลผลถ้าเราส่งคน Context ที่ ViewModel และอนุญาตให้แสดงเป็น alertDialogคุณอาจจะยังต้องเป็นเรื่องนั้นที่กิจกรรม/เศษชิ้นส่วนและ ViewModel ต้องแตกต่าง lifecycles ดังนั้นคุณต้องระวังตัวหน่อยตอนที่ฆ่า Context ที่ ViewModel

มากกว่าคนที่มีเหตุผลทางที่จะจัดการเรื่องนี้จะเป็นสำหรับ ViewModel ต้องรักษาความอธงและเตรียมพร้อมที่ต้องการข้อความโดยใช้ LiveData หรือบางอย่างที่คล้ายกันดังนั้นที่กิจกรรม/เศษชิ้นส่วน observes นั้นและจงสร้างและแสดงเป็น AlertDialog โดยรับข้อความจาก ViewModel และแจ้งค ViewModel ตอนที่กล่องโต้ตอบได้ถูกแสดง/มีการคลิกดังนั้นค ViewModel จะรับมือกับการธุรกิจต่อมาตรรกะ.

สำหรับของคุณโดยเฉพาะกรณีนี้ฉันจะออกจาก AlertDialog รหัสอยู่ในกิจกรรม/เศษชิ้นส่วนระหว่างที่หากจำเป็นต้องใช้ฉันจะกอบกู้ข้อมูลจาก ViewModel.

2021-11-21 22:45:45

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

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