Skip to content

Commit 16b68db

Browse files
committed
Change to SingleLiveData
1 parent bad1a50 commit 16b68db

File tree

4 files changed

+7
-10
lines changed

4 files changed

+7
-10
lines changed

app/src/main/java/com/example/moviedb/ui/base/BaseViewModel.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.example.moviedb.ui.base
22

3-
import androidx.lifecycle.MutableLiveData
43
import androidx.lifecycle.ViewModel
54
import androidx.lifecycle.viewModelScope
65
import com.example.moviedb.data.remote.toBaseException
@@ -16,7 +15,7 @@ import java.net.UnknownHostException
1615
open 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>() }
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package com.example.moviedb.ui.screen.image
22

3-
import androidx.lifecycle.MutableLiveData
43
import com.example.moviedb.ui.base.BaseViewModel
4+
import com.example.moviedb.utils.SingleLiveData
55
import dagger.hilt.android.lifecycle.HiltViewModel
66
import javax.inject.Inject
77

88
@HiltViewModel
99
class ImageViewModel @Inject constructor() : BaseViewModel() {
1010

11-
val imageUrl = MutableLiveData<String>()
11+
val imageUrl = SingleLiveData<String>()
1212

1313
}

app/src/main/java/com/example/moviedb/ui/screen/moviedetail/MovieDetailViewModel.kt

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package com.example.moviedb.ui.screen.moviedetail
22

3-
import androidx.lifecycle.MutableLiveData
43
import androidx.lifecycle.viewModelScope
54
import com.example.moviedb.data.model.Cast
65
import com.example.moviedb.data.model.Movie
76
import com.example.moviedb.data.repository.UserRepository
87
import com.example.moviedb.ui.base.BaseViewModel
8+
import com.example.moviedb.utils.SingleLiveData
99
import dagger.hilt.android.lifecycle.HiltViewModel
1010
import kotlinx.coroutines.Dispatchers
1111
import 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 {

app/src/main/java/com/example/moviedb/utils/SingleLiveData.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff 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
*/
1314
class SingleLiveData<T> : MutableLiveData<T>() {
1415

0 commit comments

Comments
 (0)