Frontend/실습

안드로이드앱 수정과 삭제

qoeka 2025. 3. 5. 09:47

수정

 

 

  • 어댑터는 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가 갱신된다.