수정


- 어댑터는 Activity에 속해 있지 않다. 어댑터는 RecyclerView나 ListView와 같은 UI 컴포넌트에 데이터를 연결해주는 역할을 한다.
- 메인 액티비티에 어댑터를 만든 코드를 컨택트 액티비티에서 사용할 수 있다. 어댑터를 생성할 때 Context를 전달하면 다른 Activity에서도 동일한 어댑터를 사용할 수 있다.
- 컨택트 액티비티는 메인 액티비티에 데이터를 전달받을 수 있다. Intent의 putExtra와 getExtra를 사용해 데이터를 전달한다.
- 데이터를 멤버 변수나 Adapter의 데이터 리스트에 넣을 수 있다. 이때 notifyDataSetChanged()를 호출해 어댑터에 변경된 데이터를 적용한다.
- 카드뷰를 수정할 때 수정 액티비티를 띄운다. 수정 액티비티에서는 Intent를 통해 수정할 데이터를 전달받고, 수정된 데이터를 다시 메인 액티비티에 전달한다.
- 메인 액티비티의 Context를 다른 액티비티에 전달할 수 있다.
- Activity는 startActivity()를 통해 다른 액티비티를 실행할 수 있다. 다만, Fragment에서는 getActivity()를 통해 Context를 얻은 후 startActivity()를 호출해야 한다.


컨택트 부분에 빨간 밑줄이 뜨는 이유는 우리가만든거라 못알아들어 일렬로 보내는걸 알려주는걸 해줘야한다



Contact 객체를 인텐트로부터 받아온다.
- getIntent().getSerializableExtra("contact")를 통해 이전 액티비티에서 전달된 Contact 객체를 받아온다.
- 이 방법은 Contact 클래스가 Serializable을 구현해야 한다.
- 받아온 Contact 객체의 데이터를 EditText에 세팅할 수 있다.


-
- Intent를 통해 Contact 객체를 받아온다.
- EditText에 name과 phone 값을 표시한다.
- 저장 버튼 클릭 처리:
- EditText에서 수정된 데이터를 가져온다.
- 새로운 Contact 객체를 생성한다.
- 결과 반환 및 종료:
- Intent에 수정된 데이터를 담아 setResult(RESULT_OK, intent) 호출.
- finish()를 통해 액티비티 종료.


코드에서 MainActivity는 UpdateActivity2에서 전달된 데이터를 받아 RecyclerView의 어댑터 데이터를 갱신한다. UpdateActivity2에서는 Intent를 통해 선택한 연락처 객체와 인덱스를 전달하고, 이를 MainActivity에서 받아 리스트의 해당 위치 데이터를 수정한 후 notifyDataSetChanged()로 갱신한다.


MainActivity
ActivityResultLauncher를 사용하여 UpdateActivity2에서 데이터를 받아 처리한다.
getResultCode()가 100이면 새 연락처를 추가하고, 101이면 기존 연락처를 수정한다.
연락처 리스트를 갱신한 후 notifyDataSetChanged()를 호출하여 RecyclerView를 업데이트한다.
ContactAdapter
ViewHolder에서 cardView 클릭 시 UpdateActivity2를 실행하도록 Intent를 생성한다.
Intent에 선택한 연락처 객체(contact)와 해당 리스트의 index를 담아 전달한다.
UpdateActivity2
Intent에서 전달된 연락처 정보를 수정하고 다시 MainActivity로 결과를 반환한다.
이 과정에서 Adapter는 클릭된 항목의 데이터를 UpdateActivity2로 넘기고, UpdateActivity2에서 수정된 데이터를 MainActivity가 받아 리스트를 갱신하는 구조를 가진다.


MainActivity
RecyclerView와 ContactAdapter를 초기화하고, contactArrayList를 리스트로 사용한다.
ActivityResultLauncher를 registerForActivityResult()를 통해 선언하고, onActivityResult()에서 새 연락처 추가 및 수정된 데이터를 처리하여 RecyclerView를 갱신한다.
ContactAdapter
ViewHolder의 cardView 클릭 시 현재 아이템의 index를 가져온다.
Intent를 생성하여 UpdateActivity2를 실행하며, 클릭된 연락처와 인덱스를 putExtra()로 전달한다.
((MainActivity) context).launcher.launch(intent);를 통해 MainActivity의 ActivityResultLauncher를 호출하여 업데이트를 처리하도록 한다



삭제


imgDelete.setOnClickListener()를 통해 삭제 버튼 클릭 시 AlertDialog가 표시되도록 설정한다.
다이얼로그에서 YES 버튼을 클릭하면 삭제 로직이 실행되도록 setPositiveButton()을 정의한다.
NO 버튼을 추가하여 취소할 수 있도록 설정한다.
builder.show()를 호출하여 다이얼로그를 표시한다.
setPositiveButton() 내부에서 getAdapterPosition()을 사용하여 현재 아이템의 위치를 가져온다.
contactArrayList.remove(index);를 통해 해당 아이템을 리스트에서 제거한다.
notifyDataSetChanged();를 호출하여 RecyclerView UI를 업데이트한다.
- 아이템 삭제 버튼을 클릭하면 확인 다이얼로그가 나타나며, YES 선택 시 해당 연락처가 리스트에서 제거되고 RecyclerView가 갱신된다.


'Frontend > 실습' 카테고리의 다른 글
안드로이드 앱 : 데이터베이스를 이용한 회원가입과 배포과정 (0) | 2025.03.06 |
---|---|
안드로으드앱: API 호출 (0) | 2025.03.05 |
안드로이드앱 어댑터 실습 (1) | 2025.03.04 |
안드로이드앱 : 여러페이지 화면 개발 (0) | 2025.03.03 |
안드로이드 앱 : 타이머 앱 실습 (0) | 2025.02.28 |