Skip to content

Instantly share code, notes, and snippets.

@dotkwame
Forked from nesquena/ItemClickSupport.java
Created May 12, 2017 20:48
Show Gist options
  • Select an option

  • Save dotkwame/f9e827e258bebc74d11ffccb5be6980a to your computer and use it in GitHub Desktop.

Select an option

Save dotkwame/f9e827e258bebc74d11ffccb5be6980a to your computer and use it in GitHub Desktop.

Revisions

  1. @nesquena nesquena revised this gist Oct 20, 2016. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions ids.xml
    Original file line number Diff line number Diff line change
    @@ -1,4 +1,5 @@
    <?xml version="1.0" encoding="utf-8"?>
    <!-- Inside `res/values/ids.xml` -->
    <!-- You also need to define R.id.item_click_support using ids.xml -->
    <resources>
    <item name="item_click_support" type="id" />
  2. @nesquena nesquena revised this gist Sep 15, 2015. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion ItemClickSupport.java
    Original file line number Diff line number Diff line change
    @@ -1,5 +1,5 @@
    // Source: http://www.littlerobots.nl/blog/Handle-Android-RecyclerView-Clicks/
    /*
    Source: http://www.littlerobots.nl/blog/Handle-Android-RecyclerView-Clicks/
    USAGE:
    ItemClickSupport.addTo(mRecyclerView).setOnItemClickListener(new ItemClickSupport.OnItemClickListener() {
  3. @nesquena nesquena created this gist Sep 15, 2015.
    100 changes: 100 additions & 0 deletions ItemClickSupport.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,100 @@
    // Source: http://www.littlerobots.nl/blog/Handle-Android-RecyclerView-Clicks/
    /*
    USAGE:
    ItemClickSupport.addTo(mRecyclerView).setOnItemClickListener(new ItemClickSupport.OnItemClickListener() {
    @Override
    public void onItemClicked(RecyclerView recyclerView, int position, View v) {
    // do it
    }
    });
    */
    public class ItemClickSupport {
    private final RecyclerView mRecyclerView;
    private OnItemClickListener mOnItemClickListener;
    private OnItemLongClickListener mOnItemLongClickListener;
    private View.OnClickListener mOnClickListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    if (mOnItemClickListener != null) {
    RecyclerView.ViewHolder holder = mRecyclerView.getChildViewHolder(v);
    mOnItemClickListener.onItemClicked(mRecyclerView, holder.getAdapterPosition(), v);
    }
    }
    };
    private View.OnLongClickListener mOnLongClickListener = new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View v) {
    if (mOnItemLongClickListener != null) {
    RecyclerView.ViewHolder holder = mRecyclerView.getChildViewHolder(v);
    return mOnItemLongClickListener.onItemLongClicked(mRecyclerView, holder.getAdapterPosition(), v);
    }
    return false;
    }
    };
    private RecyclerView.OnChildAttachStateChangeListener mAttachListener
    = new RecyclerView.OnChildAttachStateChangeListener() {
    @Override
    public void onChildViewAttachedToWindow(View view) {
    if (mOnItemClickListener != null) {
    view.setOnClickListener(mOnClickListener);
    }
    if (mOnItemLongClickListener != null) {
    view.setOnLongClickListener(mOnLongClickListener);
    }
    }

    @Override
    public void onChildViewDetachedFromWindow(View view) {

    }
    };

    private ItemClickSupport(RecyclerView recyclerView) {
    mRecyclerView = recyclerView;
    mRecyclerView.setTag(R.id.item_click_support, this);
    mRecyclerView.addOnChildAttachStateChangeListener(mAttachListener);
    }

    public static ItemClickSupport addTo(RecyclerView view) {
    ItemClickSupport support = (ItemClickSupport) view.getTag(R.id.item_click_support);
    if (support == null) {
    support = new ItemClickSupport(view);
    }
    return support;
    }

    public static ItemClickSupport removeFrom(RecyclerView view) {
    ItemClickSupport support = (ItemClickSupport) view.getTag(R.id.item_click_support);
    if (support != null) {
    support.detach(view);
    }
    return support;
    }

    public ItemClickSupport setOnItemClickListener(OnItemClickListener listener) {
    mOnItemClickListener = listener;
    return this;
    }

    public ItemClickSupport setOnItemLongClickListener(OnItemLongClickListener listener) {
    mOnItemLongClickListener = listener;
    return this;
    }

    private void detach(RecyclerView view) {
    view.removeOnChildAttachStateChangeListener(mAttachListener);
    view.setTag(R.id.item_click_support, null);
    }

    public interface OnItemClickListener {

    void onItemClicked(RecyclerView recyclerView, int position, View v);
    }

    public interface OnItemLongClickListener {

    boolean onItemLongClicked(RecyclerView recyclerView, int position, View v);
    }
    }
    5 changes: 5 additions & 0 deletions ids.xml
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,5 @@
    <?xml version="1.0" encoding="utf-8"?>
    <!-- You also need to define R.id.item_click_support using ids.xml -->
    <resources>
    <item name="item_click_support" type="id" />
    </resources>