Fix history bug

fongmi
jhengazuki 2 months ago
parent 8ba50e30f4
commit e9930c4b2f
  1. 25
      app/src/main/java/com/fongmi/android/tv/ui/adapter/BaseDiffAdapter.java
  2. 4
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/HistoryActivity.java

@ -21,6 +21,16 @@ public abstract class BaseDiffAdapter<T extends Diffable<T>, VH extends Recycler
this.differ = new AsyncListDiffer<>(this, new BaseItemCallback<T>());
}
private boolean listsAreSame(List<T> oldList, List<T> newList) {
if (oldList.size() != newList.size()) return false;
for (int i = 0; i < oldList.size(); i++) {
T oldItem = oldList.get(i);
T newItem = newList.get(i);
if (!oldItem.isSameItem(newItem) || !oldItem.isSameContent(newItem)) return false;
}
return true;
}
public T getItem(int position) {
return differ.getCurrentList().get(position);
}
@ -30,13 +40,21 @@ public abstract class BaseDiffAdapter<T extends Diffable<T>, VH extends Recycler
}
public void setItems(List<T> items) {
setItems(items, null);
setItems(items, () -> {});
}
public void setItems(List<T> items, Runnable runnable) {
differ.submitList(Objects.requireNonNullElseGet(items, ArrayList::new), runnable);
}
public void setItems(List<T> items, Callback callback) {
List<T> oldItems = getItems();
List<T> newItems = Objects.requireNonNullElseGet(items, ArrayList::new);
boolean hasChange = !listsAreSame(oldItems, newItems);
if (!hasChange) callback.onUpdateFinished(false);
else differ.submitList(newItems, () -> callback.onUpdateFinished(true));
}
public void add(T item, Runnable runnable) {
List<T> current = new ArrayList<>(getItems());
current.add(item);
@ -84,4 +102,9 @@ public abstract class BaseDiffAdapter<T extends Diffable<T>, VH extends Recycler
@Override
public abstract void onBindViewHolder(@NonNull VH holder, int position);
public interface Callback {
void onUpdateFinished(boolean hasChange);
}
}

@ -60,9 +60,9 @@ public class HistoryActivity extends BaseActivity implements HistoryAdapter.OnCl
}
private void getHistory() {
mAdapter.setItems(History.get(), () -> {
mAdapter.setItems(History.get(), (hasChange) -> {
mBinding.progressLayout.showContent(true, mAdapter.getItemCount());
mBinding.recycler.scrollToPosition(0);
if (hasChange) mBinding.recycler.scrollToPosition(0);
});
}

Loading…
Cancel
Save