Skip to content

Commit a2c9851

Browse files
committed
More doc and comments
1 parent c6bf431 commit a2c9851

File tree

3 files changed

+39
-13
lines changed

3 files changed

+39
-13
lines changed

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

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,24 +34,36 @@
3434
import co.paulburke.android.itemtouchhelperdemo.helper.ItemTouchHelperViewHolder;
3535

3636
/**
37+
* Simple RecyclerView.Adapter that implements {@link ItemTouchHelperAdapter} to respond to move and
38+
* dismiss events from a {@link android.support.v7.widget.helper.ItemTouchHelper}.
39+
*
3740
* @author Paul Burke (ipaulpro)
3841
*/
3942
public class RecyclerListAdapter extends RecyclerView.Adapter<RecyclerListAdapter.ItemViewHolder>
4043
implements ItemTouchHelperAdapter {
4144

45+
/**
46+
* Listener for manual initiation of a drag.
47+
*/
48+
public interface OnStartDragListener {
49+
50+
/**
51+
* Called when a view is requesting a start of a drag.
52+
*
53+
* @param viewHolder The holder of the view to drag.
54+
*/
55+
void onStartDrag(RecyclerView.ViewHolder viewHolder);
56+
}
57+
4258
private static final String[] STRINGS = new String[]{
4359
"One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten"
4460
};
4561

46-
public interface OnDragStartListener {
47-
void onDragStarted(RecyclerView.ViewHolder viewHolder);
48-
}
49-
5062
private final List<String> mItems = new ArrayList<>();
5163

52-
private final OnDragStartListener mDragStartListener;
64+
private final OnStartDragListener mDragStartListener;
5365

54-
public RecyclerListAdapter(OnDragStartListener dragStartListener) {
66+
public RecyclerListAdapter(OnStartDragListener dragStartListener) {
5567
mDragStartListener = dragStartListener;
5668
mItems.addAll(Arrays.asList(STRINGS));
5769
}
@@ -67,11 +79,12 @@ public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
6779
public void onBindViewHolder(final ItemViewHolder holder, int position) {
6880
holder.textView.setText(mItems.get(position));
6981

82+
// Start a drag whenever the handle view it touched
7083
holder.handleView.setOnTouchListener(new View.OnTouchListener() {
7184
@Override
7285
public boolean onTouch(View v, MotionEvent event) {
7386
if (MotionEventCompat.getActionMasked(event) == MotionEvent.ACTION_DOWN) {
74-
mDragStartListener.onDragStarted(holder);
87+
mDragStartListener.onStartDrag(holder);
7588
}
7689
return false;
7790
}
@@ -96,6 +109,10 @@ public int getItemCount() {
96109
return mItems.size();
97110
}
98111

112+
/**
113+
* Simple example of a view holder that implements {@link ItemTouchHelperViewHolder} and has a
114+
* "handle" view that initiates a drag event when touched.
115+
*/
99116
public static class ItemViewHolder extends RecyclerView.ViewHolder implements
100117
ItemTouchHelperViewHolder {
101118

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
/**
3232
* @author Paul Burke (ipaulpro)
3333
*/
34-
public class RecyclerListFragment extends Fragment implements RecyclerListAdapter.OnDragStartListener {
34+
public class RecyclerListFragment extends Fragment implements RecyclerListAdapter.OnStartDragListener {
3535

3636
private ItemTouchHelper mItemTouchHelper;
3737

@@ -61,7 +61,7 @@ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
6161
}
6262

6363
@Override
64-
public void onDragStarted(RecyclerView.ViewHolder viewHolder) {
64+
public void onStartDrag(RecyclerView.ViewHolder viewHolder) {
6565
mItemTouchHelper.startDrag(viewHolder);
6666
}
6767
}

app/src/main/java/co/paulburke/android/itemtouchhelperdemo/helper/SimpleItemTouchHelperCallback.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import android.graphics.Canvas;
2020
import android.support.v7.widget.RecyclerView;
2121
import android.support.v7.widget.helper.ItemTouchHelper;
22+
import android.view.View;
2223

2324
/**
2425
* An implementation of {@link ItemTouchHelper.Callback} that enables basic drag & drop and
@@ -32,6 +33,8 @@
3233
*/
3334
public class SimpleItemTouchHelperCallback extends ItemTouchHelper.Callback {
3435

36+
public static final float ALPHA_FULL = 1.0f;
37+
3538
private final ItemTouchHelperAdapter mAdapter;
3639

3740
public SimpleItemTouchHelperCallback(ItemTouchHelperAdapter adapter) {
@@ -50,6 +53,7 @@ public boolean isItemViewSwipeEnabled() {
5053

5154
@Override
5255
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
56+
// Enable drag and swipe in both directions
5357
final int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
5458
final int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END;
5559
return makeMovementFlags(dragFlags, swipeFlags);
@@ -61,29 +65,33 @@ public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder source,
6165
return false;
6266
}
6367

68+
// Notify the adapter of the move
6469
mAdapter.onItemMove(source.getAdapterPosition(), target.getAdapterPosition());
6570
return true;
6671
}
6772

6873
@Override
6974
public void onSwiped(RecyclerView.ViewHolder viewHolder, int i) {
75+
// Notify the adapter of the dismissal
7076
mAdapter.onItemDismiss(viewHolder.getAdapterPosition());
7177
}
7278

7379
@Override
7480
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
7581
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
7682

83+
// Fade out the view as it is swiped out of the parent's bounds
7784
if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
78-
final float itemWidth = (float) viewHolder.itemView.getWidth();
79-
final float alpha = 1.0f - Math.abs(dX) / itemWidth;
80-
viewHolder.itemView.setAlpha(alpha);
85+
View itemView = viewHolder.itemView;
86+
final float alpha = ALPHA_FULL - Math.abs(dX) / (float) itemView.getWidth();
87+
itemView.setAlpha(alpha);
8188
}
8289
}
8390

8491
@Override
8592
public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
8693
if (actionState != ItemTouchHelper.ACTION_STATE_IDLE) {
94+
// Let the view holder know that this item is being moved or dragged
8795
ItemTouchHelperViewHolder itemViewHolder = (ItemTouchHelperViewHolder) viewHolder;
8896
itemViewHolder.onItemSelected();
8997
}
@@ -95,8 +103,9 @@ public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionStat
95103
public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
96104
super.clearView(recyclerView, viewHolder);
97105

98-
viewHolder.itemView.setAlpha(1.0f);
106+
viewHolder.itemView.setAlpha(ALPHA_FULL);
99107

108+
// Tell the view holder it's time to restore the idle state
100109
ItemTouchHelperViewHolder itemViewHolder = (ItemTouchHelperViewHolder) viewHolder;
101110
itemViewHolder.onItemClear();
102111
}

0 commit comments

Comments
 (0)