mirror of https://github.com/FongMi/TV.git
parent
431b5d678e
commit
fa4ce33dd2
@ -0,0 +1,17 @@ |
||||
package com.fongmi.android.tv.ui.adapter.diff; |
||||
|
||||
import androidx.annotation.NonNull; |
||||
import androidx.leanback.widget.DiffCallback; |
||||
|
||||
public class BaseDiffCallback<T extends Diffable<T>> extends DiffCallback<T> { |
||||
|
||||
@Override |
||||
public boolean areItemsTheSame(T oldItem, @NonNull T newItem) { |
||||
return oldItem.isSameItem(newItem); |
||||
} |
||||
|
||||
@Override |
||||
public boolean areContentsTheSame(T oldItem, @NonNull T newItem) { |
||||
return oldItem.isSameContent(newItem); |
||||
} |
||||
} |
||||
@ -0,0 +1,67 @@ |
||||
package com.fongmi.android.tv.ui.adapter; |
||||
|
||||
import android.view.ViewGroup; |
||||
|
||||
import androidx.annotation.NonNull; |
||||
import androidx.recyclerview.widget.AsyncListDiffer; |
||||
import androidx.recyclerview.widget.RecyclerView; |
||||
|
||||
import com.fongmi.android.tv.ui.adapter.diff.BaseItemCallback; |
||||
import com.fongmi.android.tv.ui.adapter.diff.Diffable; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
|
||||
public abstract class BaseDiffAdapter<T extends Diffable<T>, VH extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<VH> { |
||||
|
||||
protected final AsyncListDiffer<T> differ; |
||||
|
||||
public BaseDiffAdapter() { |
||||
this.differ = new AsyncListDiffer<>(this, new BaseItemCallback<T>()); |
||||
} |
||||
|
||||
public T getItem(int position) { |
||||
return differ.getCurrentList().get(position); |
||||
} |
||||
|
||||
public List<T> getItems() { |
||||
return differ.getCurrentList(); |
||||
} |
||||
|
||||
public void setItems(List<T> list) { |
||||
differ.submitList(list); |
||||
} |
||||
|
||||
public void addItem(T item) { |
||||
List<T> current = new ArrayList<>(getItems()); |
||||
current.add(item); |
||||
setItems(current); |
||||
} |
||||
|
||||
public void addItems(List<T> items) { |
||||
List<T> current = new ArrayList<>(getItems()); |
||||
current.addAll(items); |
||||
setItems(current); |
||||
} |
||||
|
||||
public void remove(T item) { |
||||
List<T> current = new ArrayList<>(getItems()); |
||||
if (current.remove(item)) setItems(current); |
||||
} |
||||
|
||||
public void clear() { |
||||
setItems(new ArrayList<>()); |
||||
} |
||||
|
||||
@Override |
||||
public int getItemCount() { |
||||
return differ.getCurrentList().size(); |
||||
} |
||||
|
||||
@NonNull |
||||
@Override |
||||
public abstract VH onCreateViewHolder(@NonNull ViewGroup parent, int viewType); |
||||
|
||||
@Override |
||||
public abstract void onBindViewHolder(@NonNull VH holder, int position); |
||||
} |
||||
@ -1,28 +0,0 @@ |
||||
package com.fongmi.android.tv.ui.adapter.diff; |
||||
|
||||
import androidx.annotation.NonNull; |
||||
import androidx.leanback.widget.DiffCallback; |
||||
import androidx.recyclerview.widget.DiffUtil; |
||||
|
||||
public abstract class BaseDiffCallback<T> extends DiffCallback<T> { |
||||
|
||||
@Override |
||||
public abstract boolean areItemsTheSame(@NonNull T oldItem, @NonNull T newItem); |
||||
|
||||
@Override |
||||
public abstract boolean areContentsTheSame(@NonNull T oldItem, @NonNull T newItem); |
||||
|
||||
public final DiffUtil.ItemCallback<T> asItemCallback() { |
||||
return new DiffUtil.ItemCallback<T>() { |
||||
@Override |
||||
public boolean areItemsTheSame(@NonNull T oldItem, @NonNull T newItem) { |
||||
return BaseDiffCallback.this.areItemsTheSame(oldItem, newItem); |
||||
} |
||||
|
||||
@Override |
||||
public boolean areContentsTheSame(@NonNull T oldItem, @NonNull T newItem) { |
||||
return BaseDiffCallback.this.areContentsTheSame(oldItem, newItem); |
||||
} |
||||
}; |
||||
} |
||||
} |
||||
@ -0,0 +1,17 @@ |
||||
package com.fongmi.android.tv.ui.adapter.diff; |
||||
|
||||
import androidx.annotation.NonNull; |
||||
import androidx.recyclerview.widget.DiffUtil; |
||||
|
||||
public class BaseItemCallback<T extends Diffable<T>> extends DiffUtil.ItemCallback<T> { |
||||
|
||||
@Override |
||||
public boolean areItemsTheSame(@NonNull T oldItem, @NonNull T newItem) { |
||||
return oldItem.isSameItem(newItem); |
||||
} |
||||
|
||||
@Override |
||||
public boolean areContentsTheSame(@NonNull T oldItem, @NonNull T newItem) { |
||||
return oldItem.isSameContent(newItem); |
||||
} |
||||
} |
||||
@ -0,0 +1,8 @@ |
||||
package com.fongmi.android.tv.ui.adapter.diff; |
||||
|
||||
public interface Diffable<T> { |
||||
|
||||
boolean isSameItem(T other); |
||||
|
||||
boolean isSameContent(T other); |
||||
} |
||||
@ -1,18 +0,0 @@ |
||||
package com.fongmi.android.tv.ui.adapter.diff; |
||||
|
||||
import com.fongmi.android.tv.bean.History; |
||||
|
||||
import org.jspecify.annotations.NonNull; |
||||
|
||||
public class HistoryDiffCallback extends BaseDiffCallback<History> { |
||||
|
||||
@Override |
||||
public boolean areItemsTheSame(@NonNull History oldItem, @NonNull History newItem) { |
||||
return oldItem.getKey().equals(newItem.getKey()); |
||||
} |
||||
|
||||
@Override |
||||
public boolean areContentsTheSame(@NonNull History oldItem, @NonNull History newItem) { |
||||
return oldItem.equals(newItem); |
||||
} |
||||
} |
||||
@ -1,18 +0,0 @@ |
||||
package com.fongmi.android.tv.ui.adapter.diff; |
||||
|
||||
import com.fongmi.android.tv.bean.Keep; |
||||
|
||||
import org.jspecify.annotations.NonNull; |
||||
|
||||
public class KeepDiffCallback extends BaseDiffCallback<Keep> { |
||||
|
||||
@Override |
||||
public boolean areItemsTheSame(@NonNull Keep oldItem, @NonNull Keep newItem) { |
||||
return oldItem.getKey().equals(newItem.getKey()); |
||||
} |
||||
|
||||
@Override |
||||
public boolean areContentsTheSame(@NonNull Keep oldItem, @NonNull Keep newItem) { |
||||
return oldItem.equals(newItem); |
||||
} |
||||
} |
||||
Loading…
Reference in new issue