0

要素のリストを作成するための最良の方法(各要素はデータバインディングを使用してデータを設定します)を確認し、各要素の変更を観察します。実際には私はMutableLiveDataリストを持つViewModelを持っていますMutableLiveData<List<ElementModel>>RecyclerViewの各要素(アーキテクチャコンポーネント)を確認してください。

各要素にはファイルのアップロードやパスワードの入力などの操作があるため、操作が完了した後や読み込み中にUIを変更する必要があります。私はnotifyItemChangedとRecyclerViewアダプターで試しましたが、実際にはアニメーションが悪いので、レイアウトを更新すると良いです。

この問題を解決する最善の方法は誰ですか?

+0

'本当に意味をご参照ください

public class UserInfo{ @PrimaryKey @NonNull private String number; private String name; public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } public String getName() { return name; } public void setName(String name) { this.name = name; } public UserInfo(String number, String name) { this.number = number; this.name = name; } @Override public boolean equals(Object obj) { if (obj == this) return true; UserInfo user = (UserInfo) obj; return user.number == this.number && user.name == this.name; } public static DiffCallback<UserInfo> DIFF_CALLBACK = new DiffCallback<UserInfo>() { @Override public boolean areItemsTheSame(@NonNull UserInfo oldItem, @NonNull UserInfo newItem) { return oldItem.number.equals(newItem.number); } @Override public boolean areContentsTheSame(@NonNull UserInfo oldItem, @NonNull UserInfo newItem) { // If this comparisons wrong then to many UI changes in RecycleView return oldItem.equals(newItem); } @Override public Object getChangePayload(@NonNull UserInfo oldItem, @NonNull UserInfo newItem) { return super.getChangePayload(oldItem, newItem); } }; } 

以下のよう

public static final DiffCallback<User> DIFF_CALLBACK = new DiffCallback<User>() { @Override public boolean areItemsTheSame(@NonNull User oldUser, @NonNull User newUser) { // User properties may have changed if reloaded from the DB, but ID is fixed return oldUser.getId() == newUser.getId(); } @Override public boolean areContentsTheSame(@NonNull User oldUser, @NonNull User newUser) { // NOTE: if you use equals, your object must properly override Object#equals() // Incorrectly returning false here will result in too many animations. return oldUser.equals(newUser); } 

Userクラス? – pskink

+0

エレメントの高さは、エレメントの状態に応じて異なります。なぜなら、私は内部にビューを隠したり表示しているからです。ですから、 'notifyItemChanged'を使うと要素は変わってしまい、' executePendingBindings'はアニメーションを完璧にします – Buntupana

答えて

0

equalsを使用する場合、オブジェクトはオブジェクト#equals()を適切にオーバーライドする必要があります。 ここでfalseを誤って返すと、アニメーションが多すぎます。 link "アニメーションは、本当に悪いです" `何

関連する問題