0

요소 목록을 만드는 가장 좋은 방법은 무엇인지 알아 내려고합니다. 각 요소는 데이터 바인딩을 사용하여 데이터를 설정하고 변경 사항을 관찰합니다. 사실 MutableLiveData 목록이있는 ViewModel이 있습니다 MutableLiveData<List<ElementModel>>.RecyclerView의 각 요소 관찰 (아키텍처 구성 요소)

사실 각 요소에는 파일 업로드 또는 암호 입력과 같은 작업이있어서 작업이 완료되거나로드 될 때 UI를 변경해야합니다. RecyclerView 어댑터에서 notifyItemChanged으로 시도했지만 애니메이션이 정말 좋지 않습니다. 레이아웃을 업데이트 할 때 더 좋습니다.

누구든지이 문제에 접근하는 가장 좋은 방법이 있습니까?

+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); } 

사용자 클래스? – pskink

+0

요소의 높이에 따라 요소의 높이가 달라집니다. 왜냐하면 내부에 숨기거나보기가 있기 때문입니다. 그래서'notifyItemChanged'를 사용하면 요소의 크기가 이상하게 변하고'executePendingBindings'는 애니메이션을 완벽하게 만듭니다 – Buntupana

답변

0

equals를 사용하는 경우 개체가 Object # equals()를 올바르게 재정의해야합니다. 여기서 false를 잘못 반환하면 너무 많은 애니메이션이 생성됩니다. link "애니메이션은 정말 나쁜"`무엇을

관련 문제