Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.example.myapplication.ui.main
- import android.os.Bundle
- import android.util.Log
- import androidx.fragment.app.Fragment
- import android.view.LayoutInflater
- import android.view.View
- import android.view.ViewGroup
- import androidx.lifecycle.*
- import com.example.myapplication.R
- import kotlinx.coroutines.Job
- import kotlinx.coroutines.channels.Channel
- import kotlinx.coroutines.flow.*
- import kotlinx.coroutines.launch
- class MainViewModel: ViewModel() {
- private var counter = 0
- private val _events = MutableSharedFlow<String>(replay = 1, extraBufferCapacity = 500)
- val events = _events.asSharedFlow()
- fun createEvent(eventName: String) {
- viewModelScope.launch {
- if (eventName.equals("ON_DESTROY")) {
- for (i in 0..8) {
- val eventValue = eventName + counter++
- Log.d("TESTING", "View model - Emitting event: $eventValue")
- _events.emit(eventValue)
- }
- } else {
- val eventValue = eventName + counter++
- Log.d("TESTING", "View model - Emitting event: $eventValue")
- _events.emit(eventValue)
- }
- }
- }
- }
- class MainFragment : Fragment() {
- companion object {
- fun newInstance() = MainFragment()
- }
- private lateinit var viewModel: MainViewModel
- override fun onCreateView(
- inflater: LayoutInflater, container: ViewGroup?,
- savedInstanceState: Bundle?
- ): View {
- return inflater.inflate(R.layout.main_fragment, container, false)
- }
- override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- super.onViewCreated(view, savedInstanceState)
- viewModel = ViewModelProvider(this).get(MainViewModel::class.java)
- viewLifecycleOwner.lifecycle.addObserver(LifecycleEventObserver { _: LifecycleOwner, event: Lifecycle.Event ->
- viewModel.createEvent(event.name)
- })
- viewLifecycleOwner.lifecycleScope.launch {
- viewModel.events
- .onStart {
- val state = lifecycle.currentState
- Log.d("TESTING", "Flow observer1 - Starting in state $state")
- }
- .onCompletion {
- val state = lifecycle.currentState
- Log.d("TESTING", "Flow observer1 - Completing in state $state")
- }
- .catch {
- val state = lifecycle.currentState
- Log.d("TESTING", "Flow observer1 - caught $it")
- }
- .collect {
- val state = lifecycle.currentState
- Log.d("TESTING", "Flow observer1 - Got value $it in state $state")
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement