[안드로이드 - 코틀린 ] Activity -> Fragment 데이터 전달 근데ViewPager2 와 Fragment를 곁들인

2023. 1. 16. 23:22Android

# 오늘의 문제점 현재 진행하는 프로젝트에서 1번 Activity에서 2번 Activity에 있는 viewpager2 fragment에 전달해야 되는 문제가 발생하였다 

 

🤷🏻‍♂️ 문제 해결 과정

1. 기존에 이용하던 bundle을 이용하면 쉽게 해결 가능할 것이라 생각했다. 하지만 내 fragment는 다른 activity에 있는 viewpager2를 이용해 얹어진 fragment이다 그래서 실패 

2. sharedpreferences이나 dataStore 이용해볼까 했지만 이건 아니지

3.  1번 문제에서 디버깅을 통해 확인해 본 결과 bundle 내부에는 데이터가 제대로 전달되는 것을 확인했다 그럼 무엇이 문제일까?

 

일단 해결방법으로는 Activity 내에서 bundle 내에 데이터를 넣어준 뒤 intent를 이용해 포장해서 데이터가 전달되야 되는 Activity로 데이터를 전송해 줬다

val bundle = Bundle()

val intent = Intent(this@PickActivity, MainActivity::class.java)

main_street.setOnClickListener {
    bundle.putString("bundle_data", "1")
    intent.putExtra("mainIntent", bundle)
    startActivity(intent)
}

 

전송받은 액티비티(ViewPager가 있는 MainActivity)에는 FragmentAdapter에 해당 position에 가져온 값을 넣어주기만 하면 성공적으로 값을 전달할 수 있게 된다  

private inner class FragmentAdapter(fa: FragmentActivity) : FragmentStateAdapter(fa) {
    override fun getItemCount(): Int = 2

    override fun createFragment(position: Int): Fragment {
        return when (position) {
            0 -> {
                val mapFragment = MapFragment()
                when {
                    intent.hasExtra("mainIntent") -> {
                        val bundle = intent.getBundleExtra("mainIntent")
                        mapFragment.arguments = bundle
                    }
                }
                mapFragment
            }else -> {
                UserPageFragment()
            }

        }
    }
}