Ignore duplicate start destination updates

This commit is contained in:
Kirill Kamakin
2022-10-31 21:23:03 +01:00
parent 0487a5c038
commit 610f3e9377
2 changed files with 13 additions and 1 deletions

View File

@@ -6,6 +6,8 @@ import android.widget.TextView
import androidx.annotation.StringRes import androidx.annotation.StringRes
import androidx.core.widget.doAfterTextChanged import androidx.core.widget.doAfterTextChanged
import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.LiveData
import androidx.lifecycle.Observer
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.google.android.material.textfield.TextInputLayout import com.google.android.material.textfield.TextInputLayout
@@ -85,3 +87,12 @@ fun <T> SharedPreferences.prefsChangeFlow(
registerOnSharedPreferenceChangeListener(listener) registerOnSharedPreferenceChangeListener(listener)
awaitClose { unregisterOnSharedPreferenceChangeListener(listener) } awaitClose { unregisterOnSharedPreferenceChangeListener(listener) }
} }
fun <T> LiveData<T>.observeOnce(lifecycleOwner: LifecycleOwner, observer: Observer<T>) {
observe(lifecycleOwner, object : Observer<T> {
override fun onChanged(value: T) {
removeObserver(this)
observer.onChanged(value)
}
})
}

View File

@@ -15,6 +15,7 @@ import com.google.android.material.shape.MaterialShapeDrawable
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import gq.kirmanak.mealient.R import gq.kirmanak.mealient.R
import gq.kirmanak.mealient.databinding.MainActivityBinding import gq.kirmanak.mealient.databinding.MainActivityBinding
import gq.kirmanak.mealient.extensions.observeOnce
import gq.kirmanak.mealient.logging.Logger import gq.kirmanak.mealient.logging.Logger
import javax.inject.Inject import javax.inject.Inject
@@ -47,7 +48,7 @@ class MainActivity : AppCompatActivity() {
private fun configureNavGraph() { private fun configureNavGraph() {
val graph = navController.navInflater.inflate(R.navigation.nav_graph) val graph = navController.navInflater.inflate(R.navigation.nav_graph)
viewModel.startDestination.observe(this) { viewModel.startDestination.observeOnce(this) {
graph.setStartDestination(it) graph.setStartDestination(it)
navController.setGraph(graph, intent.extras) navController.setGraph(graph, intent.extras)
} }