본문 바로가기
개발

TIL : 프래그먼트에서 액티비티로 데이터 전해주기

by kks950115 2024. 1. 17.
728x90

각각의 프로젝트들은 다양한 방법으로 데이터를 전해줄 것이다. 

내 경우엔 메인 액티비티 안에 프래그먼트가 있고, 이 프래그먼트 안에서 메인 액티비티가 아닌 다른 액티비티로 정보를 전해줘야 했다.

학원에서 준 예제를 잘못 이해해서 헤맸었기 때문에 같은 실수를 방지하고자 정리해놓는다.

 

우선 나는 프래그먼트에서 다른 액티비티로 바로 전해주는 줄 알았다. 하지만 그게 아니였다. 메인 액티비티를 거친 뒤에 메인 액티비티에서 다른 액티비티로  전해주는 것이다.

 

프래그먼트


interface FragmentDataListener {
    fun onDataReceived(data: Member)
}

class MyContactsFragment : Fragment() {

    private var _binding: FragmentMyContactsBinding? = null
    private val binding get() = _binding!!

	//.....
    
    private var listener: FragmentDataListener? = null

    override fun onAttach(context: Context) {
        super.onAttach(context)

        if (context is FragmentDataListener) {
            listener = context
        } else {
            throw RuntimeException("$context must implement FragmentDataListener")
        }
    }
	
    //......

}

프래그먼트에다가 인터페이스로 리스너를 만들어주고 onattach에서 인터페이스가 액티비티에 구현됐는지 확인한다.

 

메인액티비티

class MainActivity : AppCompatActivity(),FragmentDataListener {

override fun onDataReceived(data: Member) {
    val intent = Intent(this,ContactDetailActivity::class.java)
    intent.putExtra("data",data)
    startActivity(intent)
}

메인액티비티에 리스너를 적용시켜주고 인터페이스에서  데이터를 받아서 처리한다.

 

그리고 다른 액티비티로 인텐트를 만들어서 넣어준다.

 

 

member =intent.getParcelableExtra("data",Member::class.java)

받는 액티비티에서는 액티비티 간 주고받는 것처럼 받아주면 된다.

 

 

728x90
반응형

댓글