Skip to content

Commit 001dcdc

Browse files
committed
Adds drag handle to list items
1 parent ef8f149 commit 001dcdc

File tree

3 files changed

+49
-10
lines changed

3 files changed

+49
-10
lines changed

app/src/main/java/co/paulburke/android/itemtouchhelperdemo/RecyclerListAdapter.java

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
package co.paulburke.android.itemtouchhelperdemo;
22

33
import android.graphics.Color;
4+
import android.support.v4.view.MotionEventCompat;
45
import android.support.v7.widget.RecyclerView;
56
import android.view.LayoutInflater;
7+
import android.view.MotionEvent;
68
import android.view.View;
79
import android.view.ViewGroup;
10+
import android.widget.ImageView;
811
import android.widget.TextView;
912

1013
import java.util.ArrayList;
@@ -24,9 +27,16 @@ public class RecyclerListAdapter extends RecyclerView.Adapter<RecyclerListAdapte
2427
"One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten"
2528
};
2629

30+
public interface OnDragStartListener {
31+
void onDragStarted(RecyclerView.ViewHolder viewHolder);
32+
}
33+
2734
private final List<String> mItems = new ArrayList<>();
2835

29-
public RecyclerListAdapter() {
36+
private final OnDragStartListener mDragStartListener;
37+
38+
public RecyclerListAdapter(OnDragStartListener dragStartListener) {
39+
mDragStartListener = dragStartListener;
3040
mItems.addAll(Arrays.asList(STRINGS));
3141
}
3242

@@ -40,6 +50,15 @@ public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
4050
@Override
4151
public void onBindViewHolder(final ItemViewHolder holder, int position) {
4252
holder.textView.setText(mItems.get(position));
53+
holder.handleView.setOnTouchListener(new View.OnTouchListener() {
54+
@Override
55+
public boolean onTouch(View v, MotionEvent event) {
56+
if (MotionEventCompat.getActionMasked(event) == MotionEvent.ACTION_DOWN) {
57+
mDragStartListener.onDragStarted(holder);
58+
}
59+
return false;
60+
}
61+
});
4362
}
4463

4564
@Override
@@ -64,10 +83,12 @@ public static class ItemViewHolder extends RecyclerView.ViewHolder implements
6483
ItemTouchHelperViewHolder {
6584

6685
public final TextView textView;
86+
public final ImageView handleView;
6787

6888
public ItemViewHolder(View itemView) {
6989
super(itemView);
70-
textView = (TextView) itemView;
90+
textView = (TextView) itemView.findViewById(R.id.text);
91+
handleView = (ImageView) itemView.findViewById(R.id.handle);
7192
}
7293

7394
@Override

app/src/main/java/co/paulburke/android/itemtouchhelperdemo/RecyclerListFragment.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
/**
1616
* @author Paul Burke (ipaulpro)
1717
*/
18-
public class RecyclerListFragment extends Fragment {
18+
public class RecyclerListFragment extends Fragment implements RecyclerListAdapter.OnDragStartListener {
1919

2020
private ItemTouchHelper mItemTouchHelper;
2121

@@ -32,7 +32,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
3232
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
3333
super.onViewCreated(view, savedInstanceState);
3434

35-
RecyclerListAdapter adapter = new RecyclerListAdapter();
35+
RecyclerListAdapter adapter = new RecyclerListAdapter(this);
3636

3737
RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
3838
recyclerView.setHasFixedSize(true);
@@ -44,4 +44,8 @@ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
4444
mItemTouchHelper.attachToRecyclerView(recyclerView);
4545
}
4646

47+
@Override
48+
public void onDragStarted(RecyclerView.ViewHolder viewHolder) {
49+
mItemTouchHelper.startDrag(viewHolder);
50+
}
4751
}

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

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,22 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
3-
android:id="@+id/text"
2+
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:id="@+id/item"
44
android:layout_width="match_parent"
5-
android:layout_height="?listPreferredItemHeight"
6-
android:gravity="center_vertical"
7-
android:paddingLeft="@dimen/activity_horizontal_margin"
8-
android:textAppearance="?android:attr/textAppearanceMedium" />
5+
android:layout_height="?listPreferredItemHeight">
6+
7+
<TextView
8+
android:id="@+id/text"
9+
android:layout_width="wrap_content"
10+
android:layout_height="wrap_content"
11+
android:layout_gravity="center_vertical"
12+
android:layout_marginLeft="@dimen/activity_horizontal_margin"
13+
android:textAppearance="?android:attr/textAppearanceMedium" />
14+
15+
<ImageView
16+
android:id="@+id/handle"
17+
android:layout_width="?listPreferredItemHeight"
18+
android:layout_height="match_parent"
19+
android:layout_gravity="center_vertical|right"
20+
android:scaleType="center"
21+
android:src="@drawable/ic_reorder_grey_500_24dp" />
22+
</FrameLayout>

0 commit comments

Comments
 (0)