如果有任何更改,livesata如何将数据发送到活动

时间:2017-10-28 05:50:25

标签: android kotlin

您好我正在阅读LiveDataObserver https://code.tutsplus.com/tutorials/introduction-to-android-architecture--cms-28749

的示例

MainActivityViewModel.kt

class MainActivityViewModel : ViewModel() {

    private var notes: MutableLiveData<List<String>>? = null    
    fun getNotes(): LiveData<List<String>> {
        if (notes == null) {
            notes = MutableLiveData<List<String>>()
            loadNotes()
        }
        return notes!!
    }
    private fun loadNotes() {
        // do async operation to fetch notes
    }
}

MainActivity.kt

class MainActivity : LifecycleActivity(), AnkoLogger {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val viewModel = ViewModelProviders.of(this)
                .get(MainActivityViewModel::class.java)
        viewModel.getNotes().observe(
                this, Observer { 
                    notes -> info("notes: $notes")
                }
        )
    }
}

如果备注中有任何更改(新增或删除),LiveData如何将数据发送到MainActivity。我看到活动正在调用viewModel.getNotes(),一旦onCreate方法完成,就不会调用它。

1 个答案:

答案 0 :(得分:2)

LiveData没有向MainActivity发送任何内容,而是“发送”到传递给Observer方法的observe。此Observer引用了MainActivity创建它的位置,并可以调用其方法。