Merge pull request #70 from TouchInstinct/lazy_view_model

Added lazy init methods for view models, with touch of roboswag flavor
This commit is contained in:
PilotOfSparrow 2019-09-12 12:22:53 +03:00 committed by GitHub
commit 540fe0e1e4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 37 additions and 0 deletions

View File

@ -23,5 +23,8 @@ dependencies {
implementation "androidx.appcompat:appcompat:$versions.appcompat"
implementation "androidx.fragment:fragment:$versions.fragment"
implementation "androidx.fragment:fragment-ktx:$versions.fragment"
implementation "androidx.lifecycle:lifecycle-extensions:$versions.lifecycle"
}

View File

@ -0,0 +1,34 @@
package ru.touchin.lifecycle.extensions
import androidx.activity.ComponentActivity
import androidx.activity.viewModels
import androidx.annotation.MainThread
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.fragment.app.viewModels
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.ViewModelStoreOwner
import ru.touchin.lifecycle.viewmodel.LifecycleViewModelProviders
@MainThread
inline fun <reified VM : ViewModel> Fragment.viewModels(
noinline ownerProducer: () -> ViewModelStoreOwner = { this },
noinline factoryProducer: () -> ViewModelProvider.Factory = { LifecycleViewModelProviders.getViewModelFactory(this) }
) = viewModels<VM>(ownerProducer, factoryProducer)
@MainThread
inline fun <reified VM : ViewModel> Fragment.targetViewModels(
noinline ownerProducer: () -> ViewModelStoreOwner = { targetFragment!! },
noinline factoryProducer: () -> ViewModelProvider.Factory = { LifecycleViewModelProviders.getViewModelFactory(targetFragment!!) }
) = viewModels<VM>(ownerProducer, factoryProducer)
@MainThread
inline fun <reified VM : ViewModel> Fragment.activityViewModels(
noinline factoryProducer: () -> ViewModelProvider.Factory = { LifecycleViewModelProviders.getViewModelFactory(requireActivity()) }
) = activityViewModels<VM>(factoryProducer)
@MainThread
inline fun <reified VM : ViewModel> ComponentActivity.viewModels(
noinline factoryProducer: () -> ViewModelProvider.Factory = { LifecycleViewModelProviders.getViewModelFactory(this) }
): Lazy<VM> = viewModels(factoryProducer)