155

の値を変更する方法は 2 つありますMutableLiveDatasetValue()しかし、 &postValue()の違いは何ですかMutableLiveData

同じドキュメントが見つかりませんでした。

MutableLiveDataこれがAndroidのクラスです。

package android.arch.lifecycle;

/**
 * {@link LiveData} which publicly exposes {@link #setValue(T)} and {@link #postValue(T)} method.
 *
 * @param <T> The type of data hold by this instance
 */
@SuppressWarnings("WeakerAccess")
public class MutableLiveData<T> extends LiveData<T> {
    @Override
    public void postValue(T value) {
        super.postValue(value);
    }

    @Override
    public void setValue(T value) {
        super.setValue(value);
    }
}
4

9 に答える 9

1

私たちのアプリでは、アクティビティ/画面の複数のビューのデータを含む単一の LiveData を使用していました。基本的に、N 個のビューに対して N 個のデータセットがあります。postData が設計されているため、これは私たちを少し悩ませました。また、どのビューを更新する必要があるかをビューに伝える LD の状態オブジェクトがあります。

したがって、LD は次のようになります。

LD {
   state (view_1, view_2, view_3 …),
   model_that_contains_data_of_all_views
}

1 つのイベントが発生したときに更新する必要があるビュー (view_1 と view_2) がいくつかあります。つまり、イベントが発生したときに同時に通知を受ける必要があります。だから、私は電話しました:

postData(LD(view_1, data))
postData(LD(view_2, data)

これは、私たちが知っている理由で機能しません。

私が理解したのは、基本的に 1 つの LD は 1 つのビューのみを表す必要があるということです。その後、postData() を 2 回続けて呼び出す必要はありません。呼び出しても、postData がそれを処理する方法は、期待どおりです (ビューに最新のデータを表示します)。すべてがうまく収まります。

1 つの LD -> 1 つのビュー。完全

1 つの LD -> 複数のビュー

于 2020-06-22T11:11:11.690 に答える