From 7ea40c5978c6e05352af03a7b0cea1a8036d23b4 Mon Sep 17 00:00:00 2001 From: John Shelley Date: Wed, 24 Dec 2014 23:19:07 -0600 Subject: [PATCH] Fix click support. Showing 1 of many options --- .../swipedemo/RecyclerViewExample.java | 36 +++-------------- .../adapter/RecyclerViewAdapter.java | 4 +- .../util/RecyclerItemClickListener.java | 40 +++++++++++++++++++ 3 files changed, 48 insertions(+), 32 deletions(-) create mode 100644 demo/src/main/java/com/daimajia/swipedemo/adapter/util/RecyclerItemClickListener.java diff --git a/demo/src/main/java/com/daimajia/swipedemo/RecyclerViewExample.java b/demo/src/main/java/com/daimajia/swipedemo/RecyclerViewExample.java index d3f0aef..d748d42 100644 --- a/demo/src/main/java/com/daimajia/swipedemo/RecyclerViewExample.java +++ b/demo/src/main/java/com/daimajia/swipedemo/RecyclerViewExample.java @@ -18,6 +18,7 @@ import android.widget.Toast; import com.daimajia.swipe.util.Attributes; import com.daimajia.swipedemo.adapter.RecyclerViewAdapter; import com.daimajia.swipedemo.adapter.RecyclerViewAdvancedAdapter; +import com.daimajia.swipedemo.adapter.util.RecyclerItemClickListener; import org.lucasr.twowayview.ItemClickSupport; import org.lucasr.twowayview.TwoWayLayoutManager; @@ -63,23 +64,19 @@ public class RecyclerViewExample extends Activity { mDataSet = new ArrayList(Arrays.asList(adapterData)); mAdapter = new RecyclerViewAdapter(this, mDataSet); + ((RecyclerViewAdapter) mAdapter).setMode(Attributes.Mode.Single); recyclerView.setAdapter(mAdapter); /* Listeners */ - ItemClickSupport itemClick = ItemClickSupport.addTo(recyclerView); - itemClick.setOnItemClickListener(onItemClickListener); - recyclerView.setOnTouchListener(new View.OnTouchListener() { + recyclerView.addOnItemTouchListener(new RecyclerItemClickListener(this, new RecyclerItemClickListener.OnItemClickListener() { @Override - public boolean onTouch(View v, MotionEvent event) { - Log.e("ListView", "OnTouch"); - return false; + public void onItemClick(View view, int position) { + Toast.makeText(mContext, "Clicked:" + position, Toast.LENGTH_SHORT).show(); } - }); + })); recyclerView.setOnScrollListener(onScrollListener); - // TODO: Item Long Click is firing for every touch. -// itemClick.setOnItemLongClickListener(onItemLongClickListener); // TODO: Item Selection Support for RecyclerView // recyclerView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @@ -96,27 +93,6 @@ public class RecyclerViewExample extends Activity { } - /** - * Substitute for our onItemClick listener for RecyclerView - */ - ItemClickSupport.OnItemClickListener onItemClickListener = new ItemClickSupport.OnItemClickListener() { - @Override - public void onItemClick(RecyclerView parent, View child, int position, long id) { - Toast.makeText(mContext, "Clicked:" + position, Toast.LENGTH_SHORT).show(); - } - }; - - /** - * Substitute for our onItemLongClick listener for RecyclerView - */ - ItemClickSupport.OnItemLongClickListener onItemLongClickListener = new ItemClickSupport.OnItemLongClickListener() { - @Override - public boolean onItemLongClick(RecyclerView recyclerView, View view, int position, long id) { - Toast.makeText(mContext, "OnItemLongClickListener:" + position, Toast.LENGTH_SHORT).show(); - return false; - } - }; - /** * Substitute for our onScrollListener for RecyclerView */ diff --git a/demo/src/main/java/com/daimajia/swipedemo/adapter/RecyclerViewAdapter.java b/demo/src/main/java/com/daimajia/swipedemo/adapter/RecyclerViewAdapter.java index 971e786..5b63fe9 100644 --- a/demo/src/main/java/com/daimajia/swipedemo/adapter/RecyclerViewAdapter.java +++ b/demo/src/main/java/com/daimajia/swipedemo/adapter/RecyclerViewAdapter.java @@ -19,7 +19,7 @@ import java.util.ArrayList; public class RecyclerViewAdapter extends RecyclerSwipeAdapter { - public static class SimpleViewHolder extends ViewHolder { + public static class SimpleViewHolder extends ViewHolder{ SwipeLayout swipeLayout; TextView textViewPos; TextView textViewData; @@ -50,7 +50,7 @@ public class RecyclerViewAdapter extends RecyclerSwipeAdapter { } @Override - public void bindRecyclerViewHolder(ViewHolder viewHolder, int position) { + public void bindRecyclerViewHolder(ViewHolder viewHolder, final int position) { SimpleViewHolder simpleViewHolder = (SimpleViewHolder) viewHolder; String item = mDataset.get(position); simpleViewHolder.swipeLayout.setShowMode(SwipeLayout.ShowMode.LayDown); diff --git a/demo/src/main/java/com/daimajia/swipedemo/adapter/util/RecyclerItemClickListener.java b/demo/src/main/java/com/daimajia/swipedemo/adapter/util/RecyclerItemClickListener.java new file mode 100644 index 0000000..af4021b --- /dev/null +++ b/demo/src/main/java/com/daimajia/swipedemo/adapter/util/RecyclerItemClickListener.java @@ -0,0 +1,40 @@ +package com.daimajia.swipedemo.adapter.util; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.GestureDetector; +import android.view.MotionEvent; +import android.view.View; + +public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener { + private OnItemClickListener mListener; + + public interface OnItemClickListener { + public void onItemClick(View view, int position); + } + + GestureDetector mGestureDetector; + + public RecyclerItemClickListener(Context context, OnItemClickListener listener) { + mListener = listener; + mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { + @Override + public boolean onSingleTapUp(MotionEvent e) { + return true; + } + }); + } + + @Override + public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) { + View childView = view.findChildViewUnder(e.getX(), e.getY()); + if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) { + mListener.onItemClick(childView, view.getChildPosition(childView)); + } + return false; + } + + @Override + public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { + } +}