亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么在 LiveData 列表中更改值時不調用 onChanged?

為什么在 LiveData 列表中更改值時不調用 onChanged?

慕容森 2021-09-03 21:51:49
語境使用MutableLiveData<List<Integer>>持有的值。當 中的第一個值(為簡潔起見使用第一個值作為示例)List遞增時,TextView應更新 inonChanged以顯示List.目標增加 a 中的第一個值 ListTextView當第一項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);    }});
查看完整描述

1 回答

?
嗶嗶one

TA貢獻1854條經驗 獲得超8個贊

LiveDataObservable 的onChanged方法僅在調用后才被調用,setValue()或者postValue().setValue()應該只從主線程postValue()調用,因為應該從不同的線程調用(onClick發生在主線程上也是如此setValue())。無論如何,使用下面的代碼將為您提供所需的東西:


btn.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

    // first val in List is incremented but onChanged isn't called, why?

    List<Integer> temp = vals.getValue();

    if(temp!=null) // null-safety just in case....

    {

        int newVal = temp.get(0) + 1;

        temp.set(0, newVal);

        vals.setValue(temp);

        Log.d(TAG, "set val at index 0 to " + newVal);

    }

}

});


查看完整回答
反對 回復 2021-09-03
  • 1 回答
  • 0 關注
  • 431 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號