Showing posts with label 【ANDROID STUDIO】Live Data. Show all posts
Showing posts with label 【ANDROID STUDIO】Live Data. Show all posts

Wednesday, May 19, 2021

【ANDROID STUDIO】Live Data

 package com.example.viewmodel


import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import com.example.viewmodel.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var viewModel: MainActivityViewModel
private lateinit var viewModelFactory: MainActivityViewModelFactory


override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
viewModelFactory = MainActivityViewModelFactory(100)
viewModel = ViewModelProvider(this, viewModelFactory).get(MainActivityViewModel::class.java)
viewModel.totalData.observe(this, Observer {
binding.resultTextView.text = it.toString()
})

binding.insertButton.setOnClickListener {
viewModel.setTotal(binding.inputEditText.text.toString().toInt())
}

}
}

package com.example.viewmodel

import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider

class MainActivityViewModelFactory(private val startingTotal : Int) : ViewModelProvider.Factory {

override fun <T : ViewModel?> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(MainActivityViewModel::class.java)) {
return MainActivityViewModel(startingTotal) as T
}
throw IllegalArgumentException("Unknown View Model Class")
}


}
package com.example.viewmodel

import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel

class MainActivityViewModel(startingTotal: Int) : ViewModel() {
private var total = MutableLiveData<Int>()
val totalData : LiveData<Int>
get() = total


init {
total.value = startingTotal
}

fun setTotal(input: Int) {
total.value = (total.value)?.plus(input)
}
}
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">

<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<EditText android:id="@+id/input_edit_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="number"
android:textSize="36sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.323"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.064" />

<Button android:id="@+id/insert_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="50dp"
android:layout_marginTop="40dp"
android:text="Add"
android:textSize="36sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/input_edit_text"
android:layout_marginLeft="50dp" />

<TextView
android:id="@+id/result_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="45dp"
android:layout_marginTop="32dp"
android:layout_marginEnd="41dp"
android:textSize="36sp"
app:layout_constraintEnd_toEndOf="@+id/insert_button"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/insert_button"
android:layout_marginRight="41dp"
android:layout_marginLeft="45dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>