님의 경우에는 액티비티 말고 데이터 저장소(메모리, 파일, SharePreferences, DB 등)를 사용해서 이 저장소 인스턴스를 공유하면 될 것 같습니다. 간단히 싱글톤 오브젝을 하나 만드시고 이걸 공유해서 사용하시면 될 것 같아요. 예를 들면, 아래처럼 간단하게 Singleton을 하나 만들어서 공유하실 수 있습니다. Singleton이 적합하지 않다면 일반적인 클래스를 Application class에서 생성해서 공유할 수도 있습니다.
object DataShare {
private val store = hashMapOf<String, DataType>()
fun DataType? getData() {
return store["KeyName"]
}
fun setData(value: DataType) {
store["KeyName"] = value
}
}
데이터를 공유할 곳에서는 아래처럼 메모리에 저장하고
// String type을 예로 들면,
DataShare.setData("blablabla")
사용할 곳에서는 읽어오면 되겠죠.
val myData = DataShare.getData() ?: ""
Application class를 이용한다면, 아래처럼 Activity에서 Application 을 참조해서 사용할 수 있습니다.
// Singleton을 일반 클래스로 변경
class DataShare {
...
}
class MyApp: Application() {
private val dataShare by lazy { DataShare() }
}
class MyActivity: AppCompatActivity {
private val dataShare by lazy {
(application as MyApp).dataShare
}
}
class MyFragment : Fragment() [
private val dataShare by lazy {
(requireActivity().application as MyApp).dataShare
}
}
저는 메모리를 공유하는 아주 간단한 방법을 사용했습니다만, 여기에는 다른 접근방법들이 많이 있으니, 검색을 더 해보시기 바랍니다. 예를 들면 ViewModel 공유라던가, Jetpack DataStore 등등. 가능하다면, Activity의 intent에 데이터를 저장해 볼 수도 있을 것 같네요.