問題タブ [kotlin-flow]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2081 参照

kotlin - MutableStateFlow 強制更新 / 通知コレクター

MutableStateFlow更新された値が古い値(ソース)と等しい場合、コレクターに通知しません。これに対する回避策を見つけましたが、複雑な値に対してうまくスケーリングできません。

回避策: / を使用してデータ クラスを複製し、 /を使用copy()してリストを作成します。toList()toMutableList()

WorkoutRoutine例 1:回避策を使用して名前を変更する単純なデータ クラスname。ここには何も問題はありません。

例 2: 複数の依存関係を持つ複雑なデータ クラス。回避策を使用してにanWorkoutRoutineを追加します。SetExerciseWorkoutRoutinecopy()toMutableList()

私は次のことを試しました:

  • MutableStateFlow.valueNotDistinct更新を強制する拡張値を追加しますMutableStateFlow.value
    -> 問題: MutableStateFlow.valuenullable でなければならない
  • を使用MutableSharedFlowすると、同等性がチェックされません-> 問題: パフォーマンスが低く、プロパティ
    がありませんvalue

私が望むのは、発行ごとにコレクターに通知することですが、MutableStateFlow の「強制通知」機能がないように見えるため、その方法がわかりません。

0 投票する
1 に答える
969 参照

android - Android Paging 3ライブラリ:新しいパラメータでリストを変更するには?

検索されたアイテムのリストを表示する検索フラグメントがあります。ユーザーが何かを入力すると、その文字列を新しいクエリ パラメータとして url に渡し、ページング 3 ライブラリを使用して新しいリストを取得します。

最初の解決策は次のとおりです。

url ( を変更することによるこのソリューションではshowPostList(newUrl)、リストは変更されずに残ります。おそらく、viewModel でキャッシュされたリストを使用します。

別の解決策はshowPostList(initUrl)、 in onViewCreatedof fragment を使用してから、パラメーターを変更してblewメソッドを使用することです。

これは機能しますが、古いリストと新しいリストに共通のアイテムがある場合、新しいリストは最後の共通の表示アイテムに表示されます。たとえば、古いリストの 5 番目の項目が新しいリストの 7 番目と同じ場合、リストを変更して新しいリストを表示すると、最初の項目ではなく 7 番目の項目から開始されます。

ここで別の解決策を見つけました:

ただし、このリストを使用すると、フラグメントに戻って更新され、Recyclerview状態が変化することがあります。