728x90
오늘은 리사이클러뷰가 만들어져 있을 때 리사이클러뷰의 아이템 위치를 이동하고 스와이프 하여 삭제하는 것을 해 보겠습니다.
1. ItemTouchHelperListener.java 클래스 만들기
스틱코드에 업로드 해 놓아 자동완성으로 언제든지 사용합니다.
스틱코드 포스팅에도 등록해 놓았으니, 사용하세요!
https://stickode.com/detail.html?no=2550
public interface ItemTouchHelperListener {
boolean onItemMove(int from_position , int to_position);
void onItemSwipe(int position);
}
2. ItemTouchHelperCallback.java 클래스 만들기
스틱코드에 업로드 해 놓아 자동완성으로 언제든지 사용합니다.
스틱코드 포스팅에도 등록해 놓았으니, 사용하세요!
https://stickode.com/detail.html?no=2550
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.RecyclerView;
public class ItemTouchHelperCallback extends ItemTouchHelper.Callback {
private static final String TAG = "ItemTouchHelperCallback";
private ItemTouchHelperListener listener;
public ItemTouchHelperCallback(ItemTouchHelperListener listener) {
this.listener = listener;
}
@Override
public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
/* getMovementFlags */
// 리사이클러뷰와 리사이클러뷰 뷰홀더를 입력받는다.
// drag 위치와 swipe 위치를 ItemTouchHelper에서 받아 셋팅한다.
// makeMovementFlags() 메소드로 drag위치와 swipe 위치를 입력하여 현재 위치값을 int로 반환해준다.
int drag_flags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
int swipe_flags = ItemTouchHelper.START | ItemTouchHelper.END;
return makeMovementFlags(drag_flags, swipe_flags);
}
public boolean isLongPressDragEnabled() {
/*isLongPressDragEnabled*/
// true를 반환하도록 설정하면 롱클릭을 감지한다.
return true;
}
@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
/* onMove */
// 리사이클러뷰,viewHolder, target(viewHolder 중 선택된 아이템)을 입력받아 움직임을 감지한다.
// ItemTouchHelperListener의 onItemMove 메소드로 해당 아이템의 움직임을 감지한다.
// onItemMove 메소드는 아이템이 움직이고 있는 가를 판별하고 boolean 값으로 반환한다.
return listener.onItemMove(viewHolder.getAdapterPosition(), target.getAdapterPosition());
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
/* onSwiped */
// 리사이클러뷰의 뷰홀더와 움직일 방향을 입력받는다.
// ItemTouchHelperListner의 onItemSwipe 메소드에 움직일 방향을 입력하여 swipe를 구현한다.
listener.onItemSwipe(viewHolder.getAdapterPosition());
}
}
3. 기존에 만들어 놓은 Adapter에 ItemTouchHelperListener를 implements 한다.
4. Adapter에 onItemMove 와 onItemSwipe를 Override 한다.
스틱코드에 업로드 해 놓아 자동완성으로 언제든지 사용합니다.
스틱코드 포스팅에도 등록해 놓았으니, 사용하세요!
https://stickode.com/detail.html?no=2550
@Override
public boolean onItemMove(int from_position, int to_position) {
ChattingListDataModel number = dataModelArrayList.get(from_position); // 이동할 객체 저장
dataModelArrayList.remove(from_position); // 이동할 객체 삭제
dataModelArrayList.add(to_position , number); // 이동하고 싶은 position 에 추가
notifyItemMoved(from_position,to_position); //Adapter에 데이터 이동알림
return true;
}
@Override
public void onItemSwipe(int position) {
/*onItemSwipe*/
//아이템의 포지션값을 받아 해당 아이템을 Swipe할때 로직을 구현
dataModelArrayList.remove(position); // 스와이프 한 객체 삭제
notifyItemRemoved(position); //Adapter에 데이터 이동알림
}
아래와 같이 사용할 수 있습니다.
리사이클러뷰에 기능을 추가하고 싶을 때 활용하세요!
'안드로이드 자바' 카테고리의 다른 글
[JAVA][Android] 시크바와 프로그레스바 연동하기 (0) | 2021.10.29 |
---|---|
[JAVA][Android] 주사위 예제 만들기 (0) | 2021.10.27 |
[JAVA][Android] MVVM 패턴을 이용하여 간단한 간식내기 어플 만들기 (1) | 2021.10.22 |
[JAVA][Android] 안드로이드 - 알림 만들기 및 알림 탭하여 액티비티로 이동 (0) | 2021.10.21 |
[JAVA][Android] 안드로이드 - 스낵바(snackbar) (0) | 2021.10.20 |