반응형
Notice
Recent Posts
Recent Comments
Link
불로구
안드로이드 스튜디오 - Activity 와 Fragment간 데이터 주고 받기 본문
반응형
Activity -> Fragment
액티비티에서 프래그먼트로 데이터를 전송하기 위해선 Bundle이란 클래스를 사용한다.
Bundle이란?
-> 여러가지 타입의 값을 저장하는 Map 클래스
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val fragmentOne : FragmentOne = FragmentOne()
val bundle : Bundle = Bundle()
bundle.putString("hello","hello")
fragmentOne.arguments = bundle
}
-> 프래그먼트의 arguments를 통해 생성된 bundle을 할당한다
override fun onActivityCreated(savedInstanceState: Bundle?) {
val data = arguments?.getString("hello")
Log.d("data" , "$data")
super.onActivityCreated(savedInstanceState)
}
-> onActivityCreated 메서드에서 arguments를 받아서 사용
Fragment -> Activity
프래그먼트에서 액티비티로 데이터를 전달하기 위해서는 사용자가 직접 리스너를 구현하면 된다.
interface onDataPassListener {
fun onDataPass(data : String?)
}
lateinit var dataPassListener : onDataPassListener
-> 우선 해당 프래그먼트.kt 파일에 인터페이스 리스너를 하나 생성한다.
-> 리스너 타입의 변수 하나를 lateinit를 통해 나중에 초기화
override fun onAttach(context: Context) {
super.onAttach(context)
dataPassListener = context as onDataPassListener //형변환
}
-> onAttach()메서드에 context를 리스너 타입으로 형변환
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val pass : Button by lazy { view.findViewById(R.id.pass) }
// Activity의 OnCreate에서 했던 작업을 프래그먼트는 여기에서 수행행
pass.setOnClickListener {
dataPassListener.onDataPass("goodBye")
}
}
-> onViewCreated() 메서드에서 리스너에 데이터를 할당
class MainActivity : AppCompatActivity() , FragmentOne.onDataPassListener {
-> 액티비티는 해당 프래그먼트의 리스너를 상속받아 구현한다.
override fun onDataPass(data: String?) {
Log.d("pass", ""+data)
}
반응형
'프로그래밍 > 코틀린 안드로이드' 카테고리의 다른 글
안드로이드 - 내가보려고 다시쓰는 Kotlin 라이브데이터(LiveData) (0) | 2021.04.22 |
---|---|
안드로이드 스튜디오 - dataBinding (0) | 2021.04.22 |
안드로이드 스튜디오 - 코틀린 쓰레드 & runOnUiThread (0) | 2021.04.20 |
코틀린 MVP패턴 아키텍쳐 (1) - 이론 (0) | 2021.04.20 |
안드로이드 스튜디오 - Firebase를 이용한 푸시알람 (수정대기) (0) | 2021.04.18 |
Comments