Created
October 13, 2018 16:31
-
-
Save k0shk0sh/f1ef02cfb57af3674c41c923d341ca71 to your computer and use it in GitHub Desktop.
Nested Fragments talking to their parent fragment via scoped Activity ViewModel
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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