본문 바로가기
Developer/Android, Java

[안드로이드] RecyclerView에서 항목 삭제하기 (리스트에서 삭제처리)

by Doony 2019. 5. 21.

RecyclerView를 사용하다보면, 중간에 일부 항목을 삭제하는 경우가 있습니다. 서버에서 데이터를 삭제함과 동시에, 앱 UI에서도 삭제처리를 해줘야하는데요. 처리하는 방식은 보통 아래 2가지와 같습니다.

  1. 이미 불러온 데이터에서 특정 항목만 리스트에서 제거
  2. 서버 재호출하여 리스트 갱신 (refresh)

상황에 따라 저는 두가지 경우를 모두 사용합니다. 이번 포스팅에서는 첫번째 방법으로 처리하는 방법에 대해 알아보겠습니다.
먼저, 특정 항목에 대한 삭제이므로 RecyclerViewAdapter에서 코드를 시작하면 됩니다.
아래는 제가 작성한 코드 중 일부만을 발췌하였습니다.

    @Override
    public void onBindViewHolder(final RecyclerView_Holder holder, final int position) {
        // 해당 position 에 해당하는 데이터 결합
        holder.deleteButtom.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
 
                final AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
                builder.setTitle("삭제");
                builder.setMessage("해당 항목을 삭제하시겠습니까?");
                builder.setPositiveButton("예",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                deleteThisView();
                            }
                        });
                builder.setNegativeButton("아니오",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                dialog.cancel();
                            }
                        });
                builder.show();
 
            }
        });
    }
cs

제가 만든 RecyclerView의 Holder에는 deleteButton 이 있습니다. 즉, 특정 리스트 뷰내의 삭제하기 버튼을 클릭하면, 해당 항목을 삭제하는 방식입니다.
해당 버튼을 클릭하면, 삭제 여부를 묻는 다이얼로그를 띄우고, 예를 클릭 시 삭제하는 메소드가 실행되게 해놨습니다.
삭제 함수는 아래와 같습니다.

myItems.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position, myItems.size());
cs
  • myItems : 현재 recyclerView로 가지고 있는 데이터 그릇을 의미
  • position : 현재 recyclerView의 position

이렇게 하면, 삭제됨과 동시에 앱 UI에서 사라지는 것을 볼 수 있습니다. 물론, 서버에서도 DELETE를 통해 제거해줘야합니다.

댓글