Last active
December 2, 2020 07:54
-
-
Save IshankGulati/1e1390ad8a1bace27ea6900dbd35467c to your computer and use it in GitHub Desktop.
Revisions
-
IshankGulati revised this gist
Oct 19, 2016 . 1 changed file with 0 additions and 5 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -57,9 +57,4 @@ public final boolean onLongClick(View view) { public final void update(RecyclerViewItemClickListener listener){ this.listener = listener; } } -
IshankGulati created this gist
Oct 17, 2016 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,8 @@ /** * Created by Ishank Gulati on 14/10/16. * Observer as per Observer design pattern. */ public interface RVObserver { void update(RecyclerViewItemClickListener listener); } This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,10 @@ /** * Created by Ishank Gulati on 14/10/16. * Subject as per Observer design pattern. */ public interface RVObservable { void registerObserver(RVObserver o); void notifyListenerAttached(); void removeObserver(); } This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,98 @@ import android.support.v7.widget.RecyclerView; import android.view.ViewGroup; import java.util.List; /** * Created by Ishank Gulati on 14/10/16. * Base adapter to be extended by all the recycler view adapters. */ public abstract class RecyclerViewBaseAdapter<T, VH extends RecyclerViewBaseViewHolder> extends RecyclerView.Adapter<VH> implements RVObservable{ protected List<T> items; private RecyclerViewItemClickListener listener; private RVObserver observer; @Override public final VH onCreateViewHolder(ViewGroup parent, int viewType) { VH vh = onCreateRecyclerViewHolder(parent, viewType); notifyListenerAttached(); return vh; } @Override public final void onBindViewHolder(VH holder, int position) { if (items != null) { holder.performBind(items.get(position), position); } onBindRecyclerViewHolder(holder, position); } /** * Functionality of onCreateViewHolder has been moved here. User should override this when using * this class * @param parent The ViewGroup into which the new View will be added after it is bound to * an adapter position. * @param viewType The view type of the new View. * @return A new ViewHolder that holds a View of the given view type. */ public abstract VH onCreateRecyclerViewHolder(ViewGroup parent, int viewType); /** * Functionality of onBindViewHolder has been moved here. User should override this when using * this class * @param holder The ViewHolder which should be updated to represent the contents of the * item at the given position in the data set. * @param position The position of the item within the adapter's data set. */ public abstract void onBindRecyclerViewHolder(VH holder, int position); /** * Method used to set on item click listener of Recycler view. * @param listener An implementation of RecyclerViewItemClickListener */ public void setOnItemClickListener(RecyclerViewItemClickListener listener){ this.listener = listener; notifyListenerAttached(); } /** * Used to update adapter's data * @param items adapter's data */ public void setDataset(List<T> items) { this.items = items; notifyDataSetChanged(); } /** * Used to register view holder in adapter. * @param o view holder implementing observer interface. */ @Override public final void registerObserver(RVObserver o) { this.observer = o; } /** * Used to remove registered view holder in adapter. */ @Override public final void removeObserver() { this.observer = null; } /** * Used to notify view holder that on click listener of recycler view has been updated. */ @Override public final void notifyListenerAttached(){ if (observer != null && listener != null) { observer.update(listener); } } } This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,65 @@ import android.support.v7.widget.RecyclerView; import android.view.View; /** * Created by Ishank Gulati on 14/10/16. * Base view holder to be extended by all the recycler view view holders. */ public abstract class RecyclerViewBaseViewHolder<T> extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener, RVObserver{ protected T item; protected int position; private RecyclerViewItemClickListener listener; private RVObservable observable; protected RecyclerViewBaseViewHolder(View itemView, RVObservable observable) { super(itemView); this.observable = observable; observable.registerObserver(this); } /** * Used to bind items to view holder. * @param item item within the adapter's data set * @param position The position of the item within the adapter's data set */ protected final void performBind(T item, int position) { this.item = item; this.position = position; } /** * onClick has been delegated to fragment having recycler view. * @param view view which is clicked */ @Override public final void onClick(View view) { if(listener != null) { listener.onClick(view, item); } } /** * onLongClick has been delegated to fragment having recycler view. * @param view view which is clicked */ @Override public final boolean onLongClick(View view) { return listener != null && listener.onLongClick(view, item); } /** * Used to update view holder with a listener listening to all the clicks on recycler view. * @param listener An implementation of RecyclerViewItemClickListener */ @Override public final void update(RecyclerViewItemClickListener listener){ this.listener = listener; } /** * Method is used to set onClickListeners on required views. */ public abstract void bindListeners(); } This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,10 @@ import android.view.View; /** * Created by Ishank Gulati on 14/10/16. */ public interface RecyclerViewItemClickListener<T> { void onClick(View view, T item); boolean onLongClick(View view, T item); }