我熟悉 WPF 中的 MVVM,但我正在移植现有的 Android 应用程序以首次使用 ViewModel 类和 LiveData。
应用程序“as/was”有一个自定义 ArrayAdapter,用于正确显示网格视图中列表中包含的项目。执行此操作的代码基本上看起来像这样(“基本上”,因为活动中实际上有 4 个这样的网格都这样做):
ArrayAdapter<String> playerAdapter = new MyAdapter<String>(this, R.layout.grid_item, playerList);
gridView.setAdapter(playerAdapter)
当 playerList 内容改变时,有一个明确的调用
playerAdapter.notifyDataSetChanged()
由于我的目标是让网格在 playerList 更改时自动响应,并且永远不必通知任何内容,现在看来“playerList”需要成为MutableLiveData<List<String>>
.
我怀疑我会遇到问题——
MyAdapter 类扩展ArrayAdapter<T>
所以在实践中它会变成一个
ArrayAdapter<MutableLiveData<List<String>>>
但是 MutableLiveData 不会在那里工作,对吧?
我可以打开它并调用创建它,如下所示:
ArrayAdapter<String> playerAdapter = new MyAdapter<String>(this, R.layout.grid_item, playerList.getValue());
这个对吗?这似乎是疯狂的方式。
最终我的目标是在 xml 中将 gridView 的android:adapter
属性分配给这个东西,并且永远不必再考虑它(除了当我修改底层列表时对 setvalue() 和 postValue() 的必需调用......我不是甚至确定如何在这里工作。
我希望已经有一个 MutableLiveData Collection 准备好去某个地方,我会使用它。
这样做的标准方法是什么?