티스토리 뷰

반응형
SMALL








1
2
3
4
public interface ItemTouchHelperListener {
    void onItemMove(int fromPosition, int toPosition);
    void onItemDismiss(int position);
}
cs



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public class SwipeController extends ItemTouchHelper.Callback {
 
    private ItemTouchHelperListener itemTouchHelperListener;
 
    public SwipeController(ItemTouchHelperListener itemTouchHelperListener) {
        this.itemTouchHelperListener = itemTouchHelperListener;
    }
 
    /**
     * ItemTouchHelper는 이벤트의 방향(direction)을 쉽게 찾을 수 있게 한다. 어떠한 방향으로 drag 혹은 swipe 되었는지 알려면 getMovementFlags() 를 반드시 override 해야 한다.
     * return 값으로 ItemTouchHelper.makeMovementFlags(int, int)를 사용하여 dragging 과 swipe 를 양쪽 방향으로 사용할 수 있다.
     */
    @Override
    public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
        int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
        int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END;
        return makeMovementFlags(dragFlags, swipeFlags);
    }
 
    @Override
    public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder fromViewHolder, @NonNull RecyclerView.ViewHolder toViewHolder) {
        itemTouchHelperListener.onItemMove(fromViewHolder.getAdapterPosition(), toViewHolder.getAdapterPosition());
        return true;
    }
 
    @Override
    public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
        itemTouchHelperListener.onItemDismiss(viewHolder.getAdapterPosition());
    }
 
    @Override
    public boolean isLongPressDragEnabled() {
        return true;
    }
 
    @Override
    public boolean isItemViewSwipeEnabled() {
        return true;
    }
 
}
cs



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
public class MainActivity extends AppCompatActivity {
 
    private RecyclerView list;
    private ListAdapter listAdapter;
 
    private SwipeController swipeController;
    private ItemTouchHelper itemTouchHelper;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        list = findViewById(R.id.list);
        listAdapter = new ListAdapter();
        list.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
        list.setAdapter(listAdapter);
 
        swipeController = new SwipeController(itemTouchHelperListener);
        itemTouchHelper = new ItemTouchHelper(swipeController);
        itemTouchHelper.attachToRecyclerView(list);
    }
 
    private ItemTouchHelperListener itemTouchHelperListener = new ItemTouchHelperListener() {
        @Override
        public void onItemMove(int fromPosition, int toPosition) {
            if (listAdapter != null) {
                listAdapter.notifyItemMoved(fromPosition, toPosition);
            }
        }
 
        @Override
        public void onItemDismiss(int position) {
            if (listAdapter != null) {
                listAdapter.notifyItemRemoved(position);
            }
        }
    };
 
}
cs




반응형
LIST
댓글