File tree Expand file tree Collapse file tree 4 files changed +7
-10
lines changed
app/src/main/java/com/example/moviedb Expand file tree Collapse file tree 4 files changed +7
-10
lines changed Original file line number Diff line number Diff line change 11package com.example.moviedb.ui.base
22
3- import androidx.lifecycle.MutableLiveData
43import androidx.lifecycle.ViewModel
54import androidx.lifecycle.viewModelScope
65import com.example.moviedb.data.remote.toBaseException
@@ -16,7 +15,7 @@ import java.net.UnknownHostException
1615open class BaseViewModel : ViewModel () {
1716
1817 // loading flag
19- val isLoading by lazy { MutableLiveData ( false ) }
18+ val isLoading by lazy { SingleLiveData < Boolean >(). apply { value = false } }
2019
2120 // error message
2221 val errorMessage by lazy { SingleLiveData <String >() }
Original file line number Diff line number Diff line change 11package com.example.moviedb.ui.screen.image
22
3- import androidx.lifecycle.MutableLiveData
43import com.example.moviedb.ui.base.BaseViewModel
4+ import com.example.moviedb.utils.SingleLiveData
55import dagger.hilt.android.lifecycle.HiltViewModel
66import javax.inject.Inject
77
88@HiltViewModel
99class ImageViewModel @Inject constructor() : BaseViewModel() {
1010
11- val imageUrl = MutableLiveData <String >()
11+ val imageUrl = SingleLiveData <String >()
1212
1313}
Original file line number Diff line number Diff line change 11package com.example.moviedb.ui.screen.moviedetail
22
3- import androidx.lifecycle.MutableLiveData
43import androidx.lifecycle.viewModelScope
54import com.example.moviedb.data.model.Cast
65import com.example.moviedb.data.model.Movie
76import com.example.moviedb.data.repository.UserRepository
87import com.example.moviedb.ui.base.BaseViewModel
8+ import com.example.moviedb.utils.SingleLiveData
99import dagger.hilt.android.lifecycle.HiltViewModel
1010import kotlinx.coroutines.Dispatchers
1111import kotlinx.coroutines.launch
@@ -17,9 +17,8 @@ class MovieDetailViewModel @Inject constructor(
1717 private val userRepository : UserRepository
1818) : BaseViewModel() {
1919
20- val movie = MutableLiveData <Movie >()
21- val cast = MutableLiveData <List <Cast >>()
22- private val favoriteChanged = MutableLiveData <Boolean >().apply { value = false }
20+ val movie = SingleLiveData <Movie >()
21+ val cast = SingleLiveData <List <Cast >>()
2322
2423 fun checkFavorite (id : String ) {
2524 viewModelScope.launch {
@@ -45,8 +44,6 @@ class MovieDetailViewModel @Inject constructor(
4544 newMovie?.isFavorite = movie.value?.isFavorite != true
4645 movie.value = newMovie
4746
48- favoriteChanged.value = true
49-
5047 newMovie?.let {
5148 viewModelScope.launch {
5249 try {
Original file line number Diff line number Diff line change @@ -9,6 +9,7 @@ import java.util.concurrent.atomic.AtomicBoolean
99 * https://medium.com/androiddevelopers/livedata-with-snackbar-navigation-and-other-events-the-singleliveevent-case-ac2622673150
1010 * Description: Custom mutable live data that used for single event
1111 * such as navigation (for configuration change), show toast..
12+ * NOTE: can has only 1 observer
1213 */
1314class SingleLiveData <T > : MutableLiveData <T >() {
1415
You can’t perform that action at this time.
0 commit comments