Skip to content

Instantly share code, notes, and snippets.

@k0shk0sh
Created October 13, 2018 16:31
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save k0shk0sh/f1ef02cfb57af3674c41c923d341ca71 to your computer and use it in GitHub Desktop.
Save k0shk0sh/f1ef02cfb57af3674c41c923d341ca71 to your computer and use it in GitHub Desktop.
Nested Fragments talking to their parent fragment via scoped Activity ViewModel
class ProfileActivityViewModel : ViewModel() {
val tabCounterLiveData = MutableLiveData<Pair<String, Long>>()
}
class ProfileActivity : AppCompatActivity() {
@Inject lateinit var viewModelFactory: ViewModelProvider.Factory
private val viewModel by lazy { ViewModelProviders.of(this, viewModelFactory).get(ProfileActivityViewModel::class.java) }
}
class ParentFragment : Fragment() {
@Inject lateinit var viewModelFactory: ViewModelProvider.Factory
private val viewModel by lazy { ViewModelProviders.of(this, viewModelFactory).get(ProfileViewModel::class.java) }
private val activityViewModel by lazy { ViewModelProviders.of(requireActivity(), viewModelFactory).get(ProfileActivityViewModel::class.java) }
private fun observeChanges() {
activityViewModel.tabCounterLiveData.observeNotNull(this) {
}
}
}
class ChildFragmentOne : Fragment() {
@Inject lateinit var viewModelFactory: ViewModelProvider.Factory
private val viewModel by lazy { ViewModelProviders.of(this, viewModelFactory).get(ChildOneFragmentViewModel::class.java) }
private val activityViewModel by lazy { ViewModelProviders.of(requireActivity(), viewModelFactory).get(ProfileActivityViewModel::class.java) }
private fun sendTabCount() {
activityViewModel.tabCounterLiveData.postValue(Pair("ChildFragmentOne", 100))
}
}
class ChildFragmentTwo : Fragment() {
@Inject lateinit var viewModelFactory: ViewModelProvider.Factory
private val viewModel by lazy { ViewModelProviders.of(this, viewModelFactory).get(ChildTwoFragmentViewModel::class.java) }
private val activityViewModel by lazy { ViewModelProviders.of(requireActivity(), viewModelFactory).get(ProfileActivityViewModel::class.java) }
private fun sendTabCount() {
activityViewModel.tabCounterLiveData.postValue(Pair("ChildFragmentTwo", 100))
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment