본문 바로가기
Android Studio

[Android Studio] RecyclerView Adapter에서 AlertDialog 처리

by coding_su 2023. 2. 2.

📝RecyclerView Adapter에서 AlertDialog 처리

어댑터 클래스에서 ViewHolder 클래스를 만들어 리사이클러뷰의 이미지를 클릭하면 AlertDialog가 뜨고

AlertDialog의 YES를 누르면 해당 항목이 삭제되고 기존 리스트가 업데이트되게 코드를 입력

 

리사이클러뷰 화면 갱신(업데이트) 함수 notifyDataSetChanged()

public class ViewHolder extends RecyclerView.ViewHolder {

        TextView txtName;
        TextView txtPhone;
        ImageView imgDelete;
        CardView cardView;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);

            txtName = itemView.findViewById(R.id.txtName);
            txtPhone = itemView.findViewById(R.id.txtPhone);
            imgDelete = itemView.findViewById(R.id.imgDelete);
            cardView = itemView.findViewById(R.id.cardView);

            // 이미지를 클릭했을때의 이벤트
            imgDelete.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    // 1. 어느 주소록을 삭제할 것인지 삭제할 주소록을 가져온다
                    deleteIndex = getAdapterPosition();

                    // 2. 알러트 다이얼로그
                    AlertDialog.Builder builder = new AlertDialog.Builder(context);
                    builder.setTitle("주소록 삭제");
                    builder.setMessage("정말 삭제하시겠습니까");
                    builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            // 3. 알러트 다이얼로그에서 Yes 눌렀을때 처리
                            // 삭제할 주소록을 데이터 베이스에서 삭제
                            DatabaseHandler db = new DatabaseHandler(context);
                            Contact contact = contactList.get(deleteIndex);
                            db.deleteContact(contact);

                            // 알러트다이얼로그는 액티비티가 아니라 메인 액티비티의 onResume 함수가 실행 안된다
                            // = 화면 갱신이 안된다

                            // 디비에 저장된 데이터 삭제했으니 메모리에 저장된 데이터도 삭제한다
                            contactList.remove(deleteIndex);
                            // 데이터가 변경되었으니 화면 갱신하라고 함수 호출
                            notifyDataSetChanged();
                        }
                    });
                    builder.setNegativeButton("NO", null);
                    builder.show();
                }
            });

        }
    }

댓글