티스토리 뷰

반응형
SMALL
반응형

 

 

맨날 까먹어서 기록,

 

Fragment 로 데이터를 전달 할때 Bundle 을 사용한다.

2024.02.28 - [Android/Etc] - [ Etc #15 ] Bundle vs Intent

 

[ Etc #15 ] Bundle vs Intent

간단하게 정리 Intent 는 데이터를 전달하는 개념이고, Bundle 은 데이터를 저장하는 용도 주로 Activity 에 데이터를 전달 할 때에는 Intent 를 사용. Fragment 로 데이터를 저장(?) 할때에는 Bundle 을 사용..

jihunstudy.tistory.com

FragmentMain().apply { 
    arguments = Bundle().apply {
        putInt("int", 2)
        putString("string", "22")
        putBoolean("boolean", false)
        putSerializable("list", tabList as ArrayList)
    }
}

보낼 때 ( 저장할 때 )

 

arguments?.run {
    val num = getInt("int") ?: 0
    val string = getString("string") ?: ""
    val boolean = getBoolean("boolean") ?: false
    val list = bundleSerializable("list", ArrayList::class.java) as? ArrayList<TabData> ?: arrayListOf()
}

받을 때 ( 저장한거 뽑아올 때 )

 

 

getSerializable

이 하위 버전에서 Deprecated 되었기 때문에 분기 처리를 해주는 함수로 하나 만들어서 사용 한다

 

fun <T: Serializable> Bundle.bundleSerializable(key: String, clazz: Class<T>): T? {
    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        this.getSerializable(key, clazz)
    } else {
        this.getSerializable(key) as T?
    }
}

 

 

참고로 list나 특정 object 를 전달 할 때에는 해당 class 가 Serializable 를 상속 받고 있어야 한다

data class TabData(
    val name: String,
    val isNative: Boolean,
    val url: String? = null,
): Serializable

 

반응형
LIST

'Android > Fragment' 카테고리의 다른 글

[ Fragment #1 ] Fragment Lifecycle  (1) 2022.09.19
댓글