Skip to content

Instantly share code, notes, and snippets.

@be1ski
Created July 7, 2020 16:38
Show Gist options
  • Save be1ski/eaf532a08f7a259f9379289706051faf to your computer and use it in GitHub Desktop.
Save be1ski/eaf532a08f7a259f9379289706051faf to your computer and use it in GitHub Desktop.
/** Утилитарный файл. Может находиться в :common:util */
inline fun <reified T> ComponentActivity.nonConfigurationInstance(
noinline instanceProducer: () -> T
) = NonConfigurationInstanceLazy(
instanceProducer = instanceProducer,
instanceHolder = viewModels()
)
inline fun <reified T> Fragment.nonConfigurationInstance(
noinline instanceProducer: () -> T
) = NonConfigurationInstanceLazy(
instanceProducer = instanceProducer,
instanceHolder = viewModels()
)
class NonConfigurationInstanceHolder<T> : ViewModel() {
var nonConfigurationInstance: T? = null
}
class NonConfigurationInstanceLazy<T>(
private val instanceProducer: () -> T,
private val instanceHolder: Lazy<NonConfigurationInstanceHolder<T>>
) : Lazy<T> {
override val value: T
get() = with(instanceHolder.value) {
nonConfigurationInstance ?: instanceProducer().also { nonConfigurationInstance = it }
}
override fun isInitialized() = instanceHolder.isInitialized()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment