BottomSheetDialog에서 Fragment로 값 전달하기
안드로이드 앱 개발 중 Fragment에서 BottomSheetDialog를 띄우고, 해당 BottomSheetDialog에서 입력된 값을 가져와야하는 상황이 생겼다.
당연히 DataBinding으로는 해결이 안되므로, 인터페이스를 활용한다.
1. 데이터 전달을 위한 인터페이스 생성
AddClassFragment.kt (BottomSheetDialogFragment)
class AddClassFragment : BottomSheetDialogFragment() {
/** AddClassBottomSheet의 데이터를 전달하기위한 인터페이스 */
interface BottomSheedDataReciever{
fun setClassDatas(lectureList:ArrayList<Lecture>)
}
lateinit var dataReciever:BottomSheedDataReciever
...
}
- BottomSheetDialog에 데이터 전달을 위한 인터페이스를 하나 생성한다.
- 인터페이스에는 매개변수로 전달할 데이터를 선언
2. 데이터 세팅
AddClassFragment.kt (BottomSheetDialogFragment)
private fun addCreateBtnEvent(){
bind.addClassBtn.setOnClickListener {
var lectureList:ArrayList<Lecture> = arrayListOf()
val classCode = UUID.randomUUID().toString().substring(0 until 8)
val title:String = bind.titleEditText.text.toString()
val professor:String = bind.professorEditText.text.toString()
val startDate = bind.startDateEditText.text.toString()
val endDate = bind.endDateEditText.text.toString()
lectureList.add(Lecture(
code = classCode,
title = title,
professor = professor,
startDate = startDate,
endDate = endDate,
))
dataReciever.setClassDatas(lectureList)
dismiss()
}
}
- 나같은 경우에는 수업 정보를 입력받아 받아와야하는 상황이었다.
- 한 번에 여러 개의 수업이 추가될 수 있으므로 ArrayList로 선언해줬다.
- 생성한 인터페이스 변수 dataReciever의 setClassDatas() 메소드에 매개변수로 수업 정보를 넣어줌
3. 데이터 수신
TimeTableFragment.kt (BottomSheetDialogFragment를 생성하는 프래그먼트)
/** 수업 추가 버튼 이벤트 */
private fun addClassBtnEventListener(){
bind.addClassBtn.setOnClickListener{
val bottomSheet = AddClassFragment()
bottomSheet.show(parentFragmentManager, bottomSheet.tag)
bottomSheet.dataReciever = object : AddClassFragment.BottomSheedDataReciever{
override fun setClassDatas(lectureList: ArrayList<Lecture>) {
lectureList.forEach{
Log.i("수업 정보", it.toString())
}
}
}
}
}
- 데이터를 받을 Fragment에서 아까 만들었던 BottomSheetDataReciever 인터페이스를 구현한다.
- 인터페이스를 구현한 후 bottomSheet.dataReciever에 넣어주면 끝
- 인터페이스를 외부에서 구현하게 함으로써 데이터를 전달할 수 있다.
'안드로이드 > 이론' 카테고리의 다른 글
[ 안드로이드 ] 해상도 대응, 다양한 화면 크기 지원 (0) | 2023.01.31 |
---|---|
[ 안드로이드 ] local.properties를 이용하여 API Key 안전하게 보관하기 (0) | 2023.01.25 |
[ 안드로이드 ] Fragment Add시 밑의 Fragment 클릭되는 문제 (0) | 2022.11.16 |
[ 안드로이드 ] Livedata Observer 등록하자 마자 호출되는 경우 or 중복 호출 (0) | 2022.11.14 |
[ 안드로이드 ] 외부 라이브러리 커스텀하기 (0) | 2022.09.26 |