gpt4 book ai didi

android - 将 ArrayAdapter 与 LiveData 结合使用。

转载 作者:搜寻专家 更新时间:2023-11-01 09:22:43 26 4
gpt4 key购买 nike

我熟悉 WPF 中的 MVVM,但我正在移植现有的 Android 应用程序以首次使用 ViewModel 类和 LiveData。

“as/was”应用程序有一个自定义 ArrayAdapter,用于在 gridview 中正确显示列表中包含的项目。执行此操作的代码看起来基本上是这样的(“基本上”是因为 Activity 中实际上有 4 个这样的网格,它们都是这样做的):

ArrayAdapter<String> playerAdapter = new MyAdapter<String>(this, R.layout.grid_item, playerList);

gridView.setAdapter(playerAdapter)

当 playerList 内容改变时,会显式调用

playerAdapter.notifyDataSetChanged()

由于我的目标是让网格在播放器列表更改时自动响应,并且永远不必通知任何东西,现在看来“播放器列表”需要变成 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 集合准备好去某个地方,我会使用它。

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

最佳答案

我相信你的想法是错误的。不要担心这个:

ArrayAdapter<MutableLiveData<List<String>>>

您将获得一个列表,仅此而已。 MutableLiveData 是手动设置一个 livedata 对象,如 setValue() 或 postValue() 。每当 liveData 被触发并为您提供新的播放器列表时,只需设置下面的代码,如下所示:

viewModel.getPlayListObservable().observe(this, new Observer<List<String>>() {
@Override
public void onChanged(List<String> playerList) {
ArrayAdapter<String> playerAdapter = new MyAdapter<String>(this, R.layout.grid_item, playerList);
gridView.setAdapter(playerAdapter);
playerAdapter.notifydataChanged();
}
});

关于android - 将 ArrayAdapter 与 LiveData 结合使用。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53389285/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com