我对WPF中的MVVM熟悉,但是正在迁移现有的Android应用程序以首次使用ViewModel类和LiveData。
应用程序“原样”具有一个自定义ArrayAdapter,可用于在Gridview中正确显示列表中包含的项目。做到这一点的代码本质上是这样的(“本质上”,因为活动中实际上有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());
这是正确的吗?似乎是疯狂的方式。
最终,我的目标是只将GridView的android:adapter
属性分配给xml中的这个东西,而不必再考虑它了(除了在修改基础列表时对setvalue()和postValue()的必要调用之外) ...我什至不知道如何在这里工作。
我希望已经有一个MutableLiveData集合可以随时使用了,我会用它。
执行此操作的标准方法是什么?
答案 0 :(得分:1)
我相信您的思维方式是错误的。不用担心:
value
您将获得一个列表,仅此而已。 MutableLiveData用于手动设置一个实时数据对象,如setValue()或postValue()。只要触发liveData并为您提供新的playerList,就设置下面的代码,就像这样:
SELECT