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
반응형
댓글