语境
使用MutableLiveData<List<Integer>>
持有的值。当 中的第一个值(为简洁起见使用第一个值作为示例)List
递增时,TextView
应更新 inonChanged
以显示List
.
目标
增加 a 中的第一个值 List
TextView
当第一项List
更改时更新
问题
在Button
点击,在第一个值List
递增,但MutableLiveData.onChanged()
不叫,这是为什么?
是否MutableLiveData
只响应其setValue
方法?
这是否可以通过List
包含MutableLiveData
整数来解决(即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);
}
});
哔哔one
相关分类