[解決済み]DatabindingとRecycleViewの使用時にインタフェースが点滅し、プロジェクトステータスの更新が混乱する


問題の説明
プロジェクトではRecyclerView+Databindingを使用し、使用中にあるitem状態を更新すると、画面が1~2回点滅してから正常に表示されることが多い.録画後にスロープレイしてみると、項目の順序が狂っていることがわかります.元の順序が1~9であると仮定すると、指定item 6を更新すると、類似の
7
5
6

の順で、明らかに7は5の前に現れるべきではありません.
デバッグでは、更新項目が上部にある場合は表示されず、更新項目が画面の下(最後の数桁)にある場合は表示され、逆順に切り替えた場合(6から5に切り替え、5のステータスを選択した場合)でも点滅します.
印刷ログは、onCreateViewHolder呼び出し時には表示されず、onBindViewHolder時に表示されることを示します.
切り替えの過程でデータ自体の順序が変化していないと他の手段で決定された場合、データをバインドする際に問題が発生するしかない.
クエリの例の解決方法は次のとおりです.
ソリューションviewHolderdataBindingの論理実行が完了した後、次のコードを実行します.
dataBinding.executePendingBindings()

げんり
これにより、次のフレームのリフレッシュに遅れるのではなく、バインド操作がすぐに実行されます.RecyclerViewは、onBindViewHolderの直後にViewを測定します.このexecutePendingBindings()メソッドは、バインドが次のフレームの描画に遅れて誤ったデータがViewにバインドされた場合、Viewが正しく測定されないため、非常に重要です.https://juejin.im/entry/587d7361b123db4d5e7d7522 executePendingBindingsは、遅延バインディングを直ちに実行します.
    /**
     * Evaluates the pending bindings, updating any Views that have expressions bound to
     * modified variables. This must be run on the UI thread.
     */
    public void executePendingBindings() {
        if (mContainingBinding == null) {
            executeBindingsInternal();
        } else {
            mContainingBinding.executePendingBindings();
        }
    }

参考記事
https://blog.csdn.net/io_field/article/details/80175954 https://stackoverflow.com/questions/53043412/android-why-use-executependingbindings-in-recyclerview https://juejin.im/entry/587d7361b123db4d5e7d7522