Dialog를 거쳐서 Activity로 돌아와 리사이클러뷰를 변경하는 법

이윤진·2023년 9월 26일
0

Android 개발

목록 보기
9/9

제목이 길고 길지만 내용은 이렇습니다
A Activity -> RecyclerView.Adapter -> B Activity -> A Activity
이런 식으로 다시 돌아와서 내용에 따라 리사이클러뷰를 변경시켜야 합니다.

Adapter에서 Activity로 가는 이유는 저는 Dialog를 Activity를 이용하여 구현하였기 때문입니다.

class DonationRVAdapter(private val itemList : ArrayList<DonationData>, val context : Context) : RecyclerView.Adapter<DonationRVAdapter.ViewHolder>() {
    inner class ViewHolder(private val binding: ListDonationBinding) :
        RecyclerView.ViewHolder(binding.root) {
        var p : Int? = null
        val button : Button = binding.donationBtnCheck
        fun bind(data: DonationData) {
            binding.donationName.text = data.name
            binding.donationMoney.text = data.price
        }
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val viewBinding = ListDonationBinding.inflate(LayoutInflater.from(parent.context), parent, false)
        return ViewHolder(viewBinding)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.bind(itemList[position])
        holder.button.setOnClickListener {
            val intent = Intent(context, DonationDialog::class.java)
            intent.putExtra("position", position)
            (context as AppCompatActivity).startActivityForResult(intent, 1)
        }
    }

    override fun getItemCount(): Int = itemList.size

}

이렇게 구현하였고, Dialog로 보이도록 설정하는 방법은 이전 포스팅을 참고해주세요.

저는 이를 OnActivityResult()를 이용하여 풀었습니다.

  1. A Activity에서 OnActivityResult()를 설정해주고,
  2. Adapter에서
    (context as AppCompatActivity).startActivityForResult(intent, 1)를 이용하여 B Activity 이동합니다.
  3. 마지막으로 B Activity에서
val resultIntent = Intent()
resultIntent.putExtra("position", position)
setResult(Activity.RESULT_OK, resultIntent)

setResult로 A Activity에게 돌아가는 이 intent가 Result라고 인지시켜줍니다.

이렇게 하면 Adapter를 거쳐서 onActivityResult를 사용할 수 있습니다!

profile
Android/Flutter 개발

0개의 댓글