Git Product home page Git Product logo

livedatasample's Introduction

LiveData Sample

Overview

Test about live data (View Models)

Use Instructions

  • Gradle configuration
def lifecycle_version = "2.4.0-alpha02"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version"
implementation "androidx.activity:activity-ktx:1.3.5"
implementation "androidx.fragment:fragment-ktx:1.3.5"
  • ViewModel
    • note: Always same pattern.
        private val _NAME = MutableLiveData(TYPE)
        val NAME: LiveData<TYPE> get() = _NAME 
class MainViewModel : ViewModel() {
    
    private val _count = MutableLiveData(0)
    val count: LiveData<Int> get() = _count 

    //Function that interact with private mutable livedata
    fun incrementCount() {
        _count.value = _count.value?.plus(1) ?: 1
    }
}
  • Activity using ViewModel
class MainActivity : AppCompatActivity() {

    private val vm by viewModels<MainViewModel>()

    @SuppressLint("SetTextI18n")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        binding.button.setOnClickListener { vm.incrementCount() }

        vm.count.observe(this, Observer {
            binding.textView.text = "Counts: $it"
        })
    }
}

For preserve state livedata, we can do:


  • Using saveStateHandle passed as parameter (option 1)
class MainViewModel(private val state: SavedStateHandle) : ViewModel() {

    private val _count = MutableLiveData(state["count"] ?: 0)
    val count: LiveData<Int> get() = _count


    fun incrementCount() {
        _count.value = _count.value?.plus(1) ?: 1
        state["count"] = _count.value
    }
}
  • Using saveStateHandle passed as parameter (option 2 - easiest)
class MainViewModel(state: SavedStateHandle) : ViewModel() {

    private val _count = state.getLiveData("count",0)
    val count: LiveData<Int> get() = _count


    fun incrementCount() {
        _count.value = _count.value?.plus(1) ?: 1
    }
}

livedatasample's People

Contributors

jorgecoello97 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.