til

day22

paulaner80 2022. 1. 12. 10:17
반응형

build.gradle

...
buildFeatures{
    dataBinding = true
}
...

dependencies {

    def lifecycle_version = "2.4.0"
    // ViewModel
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
    // LiveData
    implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"

    implementation 'androidx.activity:activity-ktx:1.2.0'
...

 

 

 

UserViewModel.kt

package com.example.viewmodel_test2

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

class UserViewModel() : ViewModel() {
    private val _height = MutableLiveData<Int>()

    val height : LiveData<Int>
        get() = _height

    init {
        _height.value = 170
    }

    fun increase(){
        _height.value = _height.value?.plus(1)
    }
}

 

 

 

activity_main.xml

<?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">
<data>
    <variable
        name="user"
        type="com.example.viewmodel_test.UserViewModel" />
</data>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView_height"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="키 증가"
        android:onClick="@{()->user.increase()}"/>
</LinearLayout>
</layout>

 

 

MainActivity.kt

package com.example.viewmodel_test

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

class MainActivity : AppCompatActivity() {
    private lateinit var binding : ActivityMainBinding
    private val userViewModel:UserViewModel by viewModels()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
        binding.user = userViewModel

        userViewModel.height.observe(this, Observer {
            binding.textViewHeight.text = it.toString()
        })

    }
}

'til' 카테고리의 다른 글

day 24  (0) 2022.01.13
day23  (0) 2022.01.13
day21  (0) 2022.01.10
day19, day20  (0) 2022.01.06
day 18  (0) 2022.01.05