Skip to content

Commit 2d96a40

Browse files
committed
Added onLongClick handler
1 parent 652882c commit 2d96a40

File tree

5 files changed

+61
-5
lines changed

5 files changed

+61
-5
lines changed

app/src/main/java/net/droidlabs/mvvmdemo/view/UsersView.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import android.widget.EditText;
1111
import android.widget.Toast;
1212
import net.droidlabs.mvvm.recyclerview.adapter.ClickHandler;
13+
import net.droidlabs.mvvm.recyclerview.adapter.LongClickHandler;
1314
import net.droidlabs.mvvm.recyclerview.adapter.binder.CompositeItemBinder;
1415
import net.droidlabs.mvvm.recyclerview.adapter.binder.ItemBinder;
1516
import net.droidlabs.mvvmdemo.BR;
@@ -66,7 +67,19 @@ public ClickHandler<UserViewModel> clickHandler()
6667
@Override
6768
public void onClick(UserViewModel user)
6869
{
69-
Toast.makeText(UsersView.this, user.getFirstName() + " " + user.getLastName(), Toast.LENGTH_LONG).show();
70+
Toast.makeText(UsersView.this, user.getFirstName() + " " + user.getLastName(), Toast.LENGTH_SHORT).show();
71+
}
72+
};
73+
}
74+
75+
public LongClickHandler<UserViewModel> longClickHandler()
76+
{
77+
return new LongClickHandler<UserViewModel>()
78+
{
79+
@Override
80+
public void onLongClick(UserViewModel user)
81+
{
82+
Toast.makeText(UsersView.this, "LONG CLICK: " + user.getFirstName() + " " + user.getLastName(), Toast.LENGTH_SHORT).show();
7083
}
7184
};
7285
}

app/src/main/res/layout/users_view.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
app:items="@{usersViewModel.users}"
2828
app:itemViewBinder="@{view.itemViewBinder}"
2929
app:clickHandler="@{view.clickHandler}"
30+
app:longClickHandler="@{view.longClickHandler}"
3031
/>
3132

3233
<LinearLayout

recyclerview-binding/src/main/java/net/droidlabs/mvvm/recyclerview/adapter/BindingRecyclerViewAdapter.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,15 @@
1414
import java.lang.ref.WeakReference;
1515
import java.util.Collection;
1616

17-
public class BindingRecyclerViewAdapter<T> extends RecyclerView.Adapter<BindingRecyclerViewAdapter.ViewHolder> implements View.OnClickListener
17+
public class BindingRecyclerViewAdapter<T> extends RecyclerView.Adapter<BindingRecyclerViewAdapter.ViewHolder> implements View.OnClickListener, View.OnLongClickListener
1818
{
1919
private static final int ITEM_MODEL = -124;
2020
private final WeakReferenceOnListChangedCallback onListChangedCallback;
2121
private final ItemBinder<T> itemBinder;
2222
private ObservableList<T> items;
2323
private LayoutInflater inflater;
2424
private ClickHandler<T> clickHandler;
25+
private LongClickHandler<T> longClickHandler;
2526

2627
public BindingRecyclerViewAdapter(ItemBinder<T> itemBinder, @Nullable Collection<T> items)
2728
{
@@ -94,6 +95,7 @@ public void onBindViewHolder(ViewHolder viewHolder, int position)
9495
viewHolder.binding.setVariable(itemBinder.getBindingVariable(item), item);
9596
viewHolder.binding.getRoot().setTag(ITEM_MODEL, item);
9697
viewHolder.binding.getRoot().setOnClickListener(this);
98+
viewHolder.binding.getRoot().setOnLongClickListener(this);
9799
viewHolder.binding.executePendingBindings();
98100
}
99101

@@ -119,6 +121,18 @@ public void onClick(View v)
119121
}
120122
}
121123

124+
@Override
125+
public boolean onLongClick(View v)
126+
{
127+
if (clickHandler != null)
128+
{
129+
T item = (T) v.getTag(ITEM_MODEL);
130+
longClickHandler.onLongClick(item);
131+
return true;
132+
}
133+
return false;
134+
}
135+
122136
public static class ViewHolder extends RecyclerView.ViewHolder
123137
{
124138
final ViewDataBinding binding;
@@ -195,4 +209,9 @@ public void setClickHandler(ClickHandler<T> clickHandler)
195209
{
196210
this.clickHandler = clickHandler;
197211
}
212+
213+
public void setLongClickHandler(LongClickHandler<T> clickHandler)
214+
{
215+
this.longClickHandler = clickHandler;
216+
}
198217
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package net.droidlabs.mvvm.recyclerview.adapter;
2+
3+
public interface LongClickHandler<T>
4+
{
5+
void onLongClick(T viewModel);
6+
}

recyclerview-binding/src/main/java/net/droidlabs/mvvm/recyclerview/binding/RecyclerViewBindings.java

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,15 @@
55
import net.droidlabs.mvvm.recyclerview.adapter.BindingRecyclerViewAdapter;
66
import net.droidlabs.mvvm.recyclerview.adapter.binder.ItemBinder;
77
import net.droidlabs.mvvm.recyclerview.adapter.ClickHandler;
8+
import net.droidlabs.mvvm.recyclerview.adapter.LongClickHandler;
89

910
import java.util.Collection;
1011

1112
public class RecyclerViewBindings
1213
{
1314
private static final int KEY_ITEMS = -123;
14-
private static final int KEY_HANDLER = -124;
15+
private static final int KEY_CLICK_HANDLER = -124;
16+
private static final int KEY_LONG_CLICK_HANDLER = -125;
1517

1618
@SuppressWarnings("unchecked")
1719
@BindingAdapter("items")
@@ -39,7 +41,22 @@ public static <T> void setHandler(RecyclerView recyclerView, ClickHandler<T> han
3941
}
4042
else
4143
{
42-
recyclerView.setTag(KEY_HANDLER, handler);
44+
recyclerView.setTag(KEY_CLICK_HANDLER, handler);
45+
}
46+
}
47+
48+
@SuppressWarnings("unchecked")
49+
@BindingAdapter("longClickHandler")
50+
public static <T> void setHandler(RecyclerView recyclerView, LongClickHandler<T> handler)
51+
{
52+
BindingRecyclerViewAdapter<T> adapter = (BindingRecyclerViewAdapter<T>) recyclerView.getAdapter();
53+
if (adapter != null)
54+
{
55+
adapter.setLongClickHandler(handler);
56+
}
57+
else
58+
{
59+
recyclerView.setTag(KEY_LONG_CLICK_HANDLER, handler);
4360
}
4461
}
4562

@@ -48,7 +65,7 @@ public static <T> void setHandler(RecyclerView recyclerView, ClickHandler<T> han
4865
public static <T> void setItemViewBinder(RecyclerView recyclerView, ItemBinder<T> itemViewMapper)
4966
{
5067
Collection<T> items = (Collection<T>) recyclerView.getTag(KEY_ITEMS);
51-
ClickHandler<T> clickHandler = (ClickHandler<T>) recyclerView.getTag(KEY_HANDLER);
68+
ClickHandler<T> clickHandler = (ClickHandler<T>) recyclerView.getTag(KEY_CLICK_HANDLER);
5269
BindingRecyclerViewAdapter<T> adapter = new BindingRecyclerViewAdapter<>(itemViewMapper, items);
5370
if(clickHandler != null)
5471
{

0 commit comments

Comments
 (0)