คำถามติดแท็ก android-livedata

7
ความแตกต่างของ setValue () & postValue () ใน MutableLiveData
MutableLiveDataมีสองวิธีที่ทำให้ค่าการเปลี่ยนแปลงของความเป็น แต่อะไรคือความแตกต่างระหว่างsetValue()& postValue()in MutableLiveData. ฉันไม่พบเอกสารประกอบสำหรับสิ่งเดียวกัน นี่คือคลาสMutableLiveDataของ Android package android.arch.lifecycle; /** * {@link LiveData} which publicly exposes {@link #setValue(T)} and {@link #postValue(T)} method. * * @param <T> The type of data hold by this instance */ @SuppressWarnings("WeakerAccess") public class MutableLiveData<T> extends LiveData<T> { @Override public void postValue(T value) { super.postValue(value); } …

3
เหตุใดจึงมีคลาสย่อย MutableLiveData ของ LiveData แยกต่างหาก
ดูเหมือนว่าจะMutableLiveDataแตกต่างจากLiveDataการทำให้setValue()และpostValue()วิธีการสาธารณะเท่านั้นในขณะที่LiveDataพวกเขาได้รับการคุ้มครอง มีเหตุผลอะไรบ้างในการสร้างคลาสแยกต่างหากสำหรับการเปลี่ยนแปลงนี้และไม่เพียงกำหนดวิธีการเหล่านั้นให้เป็นแบบสาธารณะในLiveDataตัวเอง โดยทั่วไปแล้วรูปแบบของการสืบทอด (การเพิ่มการมองเห็นของวิธีการบางอย่างเป็นการเปลี่ยนแปลงเพียงอย่างเดียว) การปฏิบัติที่รู้จักกันดีและมีสถานการณ์ใดบ้างที่อาจเป็นประโยชน์ (สมมติว่าเราสามารถเข้าถึงรหัสทั้งหมดได้)

4
การสังเกต LiveData จาก ViewModel
ฉันมีคลาสแยกต่างหากที่ฉันจัดการการดึงข้อมูล (โดยเฉพาะ Firebase) และฉันมักจะส่งคืนออบเจ็กต์ LiveData จากมันและอัปเดตแบบอะซิงโครนัส ตอนนี้ฉันต้องการเก็บข้อมูลที่ส่งคืนไว้ใน ViewModel แต่ปัญหาคือเพื่อให้ได้ค่าดังกล่าวฉันต้องสังเกตวัตถุ LiveData ที่ส่งคืนจากคลาสการดึงข้อมูลของฉัน วิธีการสังเกตการณ์ต้องการวัตถุ LifecycleOwner เป็นพารามิเตอร์แรก แต่เห็นได้ชัดว่าฉันไม่มีสิ่งนั้นอยู่ใน ViewModel ของฉันและฉันรู้ว่าฉันไม่ควรเก็บการอ้างอิงถึง Activity / Fragment ภายใน ViewModel ฉันควรทำอย่างไรดี?

3
Kotlin Flow กับ Android LiveData
ฉันมีคำถามบางอย่างเกี่ยวกับ Kotlin Flow ฉันสามารถสังเกต LiveData ได้จากหลายแฟรกเมนต์ ฉันสามารถทำสิ่งนี้กับ Flow ได้หรือไม่ ถ้าใช่แล้วได้อย่างไร เราสามารถมี LiveData หลายรายการจาก LiveData เดียวโดยใช้&map switchMapมีวิธีใดที่จะมีการไหลหลายครั้งจากการไหลของแหล่งเดียว? ใช้MutableLiveDataฉันสามารถปรับปรุงข้อมูลได้จากทุกที่โดยใช้การอ้างอิงตัวแปร มีวิธีใดที่จะทำเช่นเดียวกันกับ Flow ฉันมีกรณีใช้: ฉันจะสังเกตการSharedPreferencesใช้callbackFlow{...}ซึ่งจะให้ฉันไหลที่มาเดียว จาก Flow นั้นฉันต้องการสร้าง Flow หลายรายการสำหรับคู่คีย์ - ค่าแต่ละคู่ คำถามเหล่านี้อาจฟังดูไร้สาระ ฉันใหม่สำหรับ Rx และ Flow โลก

2
ใช้ viewLifecycleOwner เป็น LifecycleOwner
ฉันมีชิ้นส่วน: class MyFragment : BaseFragment() { // my StudentsViewModel instance lateinit var viewModel: StudentsViewModel override fun onCreateView(...){ ... } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) viewModel = ViewModelProviders.of(this).get(StudentsViewModel::class.java) updateStudentList() } fun updateStudentList() { // Compiler error on 'this': Use viewLifecycleOwner as the LifecycleOwner viewModel.students.observe(this, Observer { //TODO: …

2
Kotlin Flow กับ LiveData
ใน Google I / O ล่าสุด Jose Alcerreca และ Yigit Boyar บอกกับเราว่าเราไม่ควรใช้ LiveData เพื่อดึงข้อมูลอีกต่อไป ตอนนี้เราควรใช้ฟังก์ชั่นระงับสำหรับการดึงข้อมูลครั้งเดียวและใช้ Flow ของ Kotlin เพื่อสร้างกระแสข้อมูล ฉันยอมรับว่า coroutines นั้นยอดเยี่ยมสำหรับการดึงข้อมูลแบบครั้งเดียวหรือการดำเนินการ CRUD อื่น ๆ เช่นการแทรกเป็นต้น แต่ในกรณีที่ฉันต้องการสตรีมข้อมูลฉันไม่เข้าใจว่าข้อดีของโฟลว์คืออะไร สำหรับฉันแล้วดูเหมือนว่า LiveData ก็ทำเช่นเดียวกัน ตัวอย่างที่มี Flow: ViewModel val items = repository.fetchItems().asLiveData() กรุ fun fetchItems() = itemDao.getItems() เชียงดาว @Query("SELECT * FROM item") fun getItems(): Flow<List<Item>> …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.