프로그래밍 언어/Java

[Android java] Dialog에서 RecyclerView 항목 삭제하기

happy_life 2021. 11. 30. 13:19

RecyclerView에서 항목 삭제하기

안녕하세요 오늘은 RecyclerView에서 선택한 항목을 삭제하는 것을 알아보겠습니다.  오늘 알아볼 내용은 일반적인 항목 삭제가 아니라 다른 Class에 값을 전달해 삭제하는 방법을 알아보겠습니다.

 

다른 class(Dialog)에서 값을 삭제하려면 interface를 이용해야 합니다.

 

저는 Dialog를 누르면 선택된 recyclerview 가 사라지는 코드를 구현해보겠습니다.

position0인 것을 선택하면 계산기록 Dialog가 뜹니다.
Dialog에서 삭제를 누르면 선택한 position의 항목이 삭제 됩니다.

 

Adapter에서 RecyclerView가 있는 클래스로 클릭된 itemView의 position을 전달

 

1)onListItemSelectedInterface를 만들었습니다.

package com.example.realproject;

import android.view.View;


public interface onListItemSelectedInterface {
    void onItemSelected(View v, int position);
}

 

 

2)Adapter 생성자에 인터페이스를  부여합니다.

 

 

adapter의 아이템뷰는 ViewHolder에서 담당하고 있습니다. 따라서 Adapter 클래스의 itemView밑에 인터페이스를 통해 값을 넣어줍니다.▼

이 과정까지 진행되면 mListener라는 onListItemSelectedInterface에 값(getAdapterPosition())을 넣게 됩니다.

 

 

3)itemList와 adapter를 구현한 class(recyclerview를 구현한 class)에 interface를 장착합니다.

RecyclerView Class 에 interface의 메소드를 구현해주었습니다.

받은 pos인덱스를 전역변수 position에 넣어주었습니다.(pos에는 getAdapterPosition()의 값이 들어옵니다)

 

여기까지 되면 adapter에서 어떤 position의 아이템이 클릭되었는지의 값이 인터페이스를 통해 전달되고 그 값을

전역변수인 position에 입력하므로써 우리는 어떤 것이 선택되었는지를 RecyclerView를 구현한 class에서 알 수 있습니다.


Dialog에서 RecyclerView가 구현된 class로 클릭 이벤트 값 전달

 

4)Dialog에서 RecyclerView가 구현된 class로 값을 전달해줘야 하기 때문에 interface를 하나 더 만듭니다.

 

Dialog에서의 코드

아까와 마찬가지로 값을 전달해주는 애이기 때문에 생성자에 interface를 줍니다.

 

생성자와 interface 코드

 

위의 코드를 통해 Dialog의 deleteSelectedItemView라는  TextView를 클릭하면 RecyclerView가 있는 클래스에 "선택 항목 삭제"라는 값을 전달하게 됩니다.

 

4)RecyclerView가 있는 Class에 아까 구현한 interface DisMissListener를 장착합니다.

 

 

DisMissListener를 구현합니다. 저기 보이는 dlgWord 에는 "선택 항목 삭제"

라는 값이 들어올 것입니다.

 

mFriendItem은 list Data 값입니다. 따라서 선택항목삭제를 클릭하게 될 때 

remove메소드를 사용하고 거기안에 전역변수에 있던 position값을 줌으로써 

Dialog에서 RecyclerView 항목 삭제를 할 수 있게 됩니다.

 

인터페이스를 두 개나 써서 좀 복잡하지만, 요약하자면

 

adapter -> RecyclerView가 있는 Class (position 전달)

Dialog -> RecyclerView가 있는 Class(클릭 이벤트 전달)

 

이라는 두 가지의 interface를 통해

(클릭 이벤트 전달) 시 -> 전달받은 position에 있는 item을 지울 수 있게 됩니다.

 

헷갈리시는 부분이 있으시면 댓글 남겨주세요!