将ArrayAdapter与LiveData一起使用。

时间:2018-11-20 08:51:35

标签: android android-livedata mutablelivedata

我对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集合可以随时使用了,我会用它。

执行此操作的标准方法是什么?

1 个答案:

答案 0 :(得分:1)

我相信您的思维方式是错误的。不用担心:

value

您将获得一个列表,仅此而已。 MutableLiveData用于手动设置一个实时数据对象,如setValue()或postValue()。只要触发liveData并为您提供新的playerList,就设置下面的代码,就像这样:

SELECT