반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 카이스트맛집
- glfw
- 궁동
- BFS
- 대전맛집
- 알고리즘
- 몰입캠프후기
- 자바
- 안드로이드스튜디오
- 컴퓨터그래픽스
- 프로그래머스
- html
- 카이스트
- 리사이클러뷰
- 우선순위큐
- 위상정렬
- 후기
- computergraphics
- 분리집합
- 백준
- 타입스크립트
- 앱개발
- MySQL
- 어은동맛집
- nodeJS
- 프래그먼트
- 몰입캠프
- DP
- node.js
- 자바스크립트
Archives
- Today
- Total
소근소근
리사이클러뷰(RecyclerView) 스와이프(swipe)로 아이템 이동 및 삭제 구현[AndroidStudio-JAVA] 본문
AndroidStudio
리사이클러뷰(RecyclerView) 스와이프(swipe)로 아이템 이동 및 삭제 구현[AndroidStudio-JAVA]
JJureng 2021. 7. 5. 20:44728x90
반응형
SMALL
1. ItemTouchHelperListener.java (interface)
public interface ItemTouchHelperListener {
boolean onItemMove(int from_position , int to_position);
void onItemSwipe(int position);
}
2. ItemTouchHelperCallback.java
public class ItemTouchHelperCallback extends ItemTouchHelper.Callback {
private ItemTouchHelperListener listener;
public ItemTouchHelperCallback(ItemTouchHelperListener listener){
this.listener = listener;
}
@Override
public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
int drag_flags = ItemTouchHelper.UP|ItemTouchHelper.DOWN;
int swipe_flags = ItemTouchHelper.START|ItemTouchHelper.END;
return makeMovementFlags(drag_flags, swipe_flags);
}
public boolean isLongPressDragEnabled(){
return true;
}
@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
return listener.onItemMove(viewHolder.getAdapterPosition(), target.getAdapterPosition());
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
listener.onItemSwipe(viewHolder.getAdapterPosition());
}
}
3. 리사이클러 어댑터 클래스 ItemTouchHelperListener를 implement한다
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MyViewHolder> implements ItemTouchHelperListener {
@Override
public boolean onItemMove(int from_position, int to_position) {
String number = list.get(from_position);
list.remove(from_position);
list.add(to_position , number);
notifyItemMoved(from_position,to_position);
return true;
}
@Override
public void onItemSwipe(int position) {
String number = numbook.get(position);
list.remove(position);
notifyItemRemoved(position);
}
public class MyViewHolder extends RecyclerView.ViewHolder{
}
@NonNull
@Override
public RecyclerAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
}
@Override
public void onBindViewHolder(@NonNull RecyclerAdapter.MyViewHolder holder, int position) {
}
@Override
public int getItemCount() {
return numbook.size();
}
}
onItemMove는 위치를 옮기는 함수이다.
원래 포지션의 데이터를 저장해놓고, 그 위치의 값을 지운다. 나중 포지션에 해당 데이터를 add해주고
notifyItemMoved를 호출한다.
onItemSwipe는 오른쪽(혹은 왼쪽)으로 스와이프하면 해당 아이템이 삭제되도록한다.
remove로 해당 데이터를 지우고 notifyItemMoved를 호출한다.
4. 마지막으로는 Mainactivity에
ItemTouchHelper helper;
helper = new ItemTouchHelper(new ItemTouchHelperCallback(adapter));
helper.attachToRecyclerView(rv);
추가해주면 되는데 코드에 따라 다르다.
내 코드의 경우 리사이클러뷰가 fragment에 있어서 fragment class의 onCreatView에서 추가해주었다.
public class phone extends Fragment {
PhoneAdapter adapter;
ItemTouchHelper helper;
private RecyclerView recyclerView;
public phone(){
}
public phone(ArrayList<String> numbook , ArrayList<String> namebook , ArrayList<Bitmap> photobook){
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
private void setAdapter() {
}
@Nullable
@Override
public View onCreateView(@Nullable LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
ViewGroup v = (ViewGroup)inflater.inflate(R.layout.fragment_phone, container, false);
recyclerView = v.findViewById(R.id.phone_recycler);
setAdapter();
helper = new ItemTouchHelper(new ItemTouchHelperCallback(adapter));
helper.attachToRecyclerView(recyclerView);
return v;
}
}
fragment 의 경우엔 이런식으로 작성하면 된다.
728x90
반응형
LIST
'AndroidStudio' 카테고리의 다른 글
안드로이드 앱 화면 회전 방지, 고정하는 방법 (mainactivity, fragment) [ AndroidStudio-JAVA] (0) | 2021.07.06 |
---|---|
안드로이드 스튜디오 연락처 연동 - 삭제하기 / RecyclerView에서 아이템 스와이프시 삭제하기[AndroidStudio-JAVA] (0) | 2021.07.05 |
안드로이드 스튜디오 일정시간 카메라 플래시 켜고 끄기 [AndroidStudio-JAVA] (0) | 2021.07.05 |
EditText 입력 시 키보드 화면 밀림 현상 해결[AndroidStudio-JAVA] (0) | 2021.07.05 |
TabLayout , ViewPager2 , fragment로 탭 구조 구현하기 [AndroidStudio-JAVA] (0) | 2021.07.05 |