package carbon.recycler; import android.support.annotation.NonNull; import android.support.v7.util.DiffUtil; import android.support.v7.widget.RecyclerView; import android.view.View; import carbon.widget.AutoCompleteEditText; public abstract class ArrayAdapter<VH extends RecyclerView.ViewHolder, I> extends Adapter<VH, I> implements AutoCompleteEditText.AutoCompleteDataProvider<I> { private carbon.widget.RecyclerView.OnItemClickedListener<I> onItemClickedListener; private boolean diff = true; private DiffArrayCallback<I> diffCallback; public ArrayAdapter() { items = (I[]) new Object[0]; // doesn't really matter } public ArrayAdapter(I[] items) { this.items = items; } protected I[] items; public I getItem(int position) { return items[position]; } @Override public String[] getItemWords(int position) { return new String[]{getItem(position).toString()}; } @Override public int getItemCount() { return items.length; } public void setDiffCallback(DiffArrayCallback<I> diffCallback) { this.diffCallback = diffCallback; } public void setItems(@NonNull I[] items) { if (!diff) { this.items = items; return; } if (diffCallback == null) diffCallback = new DiffArrayCallback<>(); diffCallback.setArrays(this.items, items); DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(diffCallback); this.items = items; diffResult.dispatchUpdatesTo(this); } public I[] getItems() { return items; } @Override public long getItemId(int position) { return position; } public void setOnItemClickedListener(carbon.widget.RecyclerView.OnItemClickedListener<I> onItemClickedListener) { this.onItemClickedListener = onItemClickedListener; } protected void fireOnItemClickedEvent(View view, int position) { if (onItemClickedListener != null) onItemClickedListener.onItemClicked(view, items[position], position); } public void setDiffEnabled(boolean useDiff) { this.diff = useDiff; } public boolean isDiffEnabled() { return diff; } }