【发布时间】:2019-03-01 16:59:20
【问题描述】:
上下文
使用MutableLiveData<List<Integer>> 保存值。当List 中的第一个值(为简洁起见,以第一个值为例)递增时,TextView 应在onChanged 中更新以显示List 中的第一个值。
目标
- 增加
List中的第一个值 - 当
List的第一项更改时更新TextView
问题
- 在点击
Button时,List中的第一个值会递增,但不会调用MutableLiveData.onChanged(),这是为什么呢? -
MutableLiveData是否只响应其setValue方法? - 这是否可以通过包含
MutableLiveData整数的List来解决(即MutableLiveData<List<MutableLiveData<Integer>>,有问题,因为需要List中的每个项目的侦听器)? - 有没有更好的方法来实现目标?
代码
final MutableLiveData<List<Integer>> vals = new MutableLiveData<>();
List<Integer> intVals = new ArrayList<>();
intVals.add(0);
vals.setValue(intVals);
tv.setText("" + vals.getValue().get(0));
vals.observe(this, new Observer<List<Integer>>() {
@Override
public void onChanged(@Nullable List<Integer> integers) {
int firstVal = integers.get(0);
Log.d(TAG, "onChanged val " + firstVal);
tv.setText("" + firstVal);
}
});
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// first val in List is incremented but onChanged isn't called, why?
int newVal = vals.getValue().get(0) + 1;
vals.getValue().set(0, newVal);
Log.d(TAG, "set val at index 0 to " + newVal);
}
});
【问题讨论】:
标签: java android android-livedata mutablelivedata