안드로이드 자바 코틀린 기초 지식/안드로이드 예제 및 코드
MVVM pattern
Everyday Growing Engineer
2023. 3. 18. 16:26

MVVM 예제
1. fragment_mvvm_pattern.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".fragments_code_examples.mvvm_pattern.MvvmPatternFragment">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<EditText
android:id="@+id/count_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="100dp"
android:gravity="center"
android:inputType="number"
android:textSize="50sp"
android:text="0"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="0"/>
<Button
android:id="@+id/button_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:text="더하기"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/count_edit_text"/>
<TextView
android:id="@+id/text_sum"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/purple_200"
android:textSize="50sp"
android:text="0"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button_count" android:layout_marginTop="30dp"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</FrameLayout>
</layout>
2. MainViewModel.class
import androidx.lifecycle.ViewModel
class MainViewModel : ViewModel() {
private var num = 0
fun getTotal(): Int{
return num
}
fun addNum(input : Int){
num += input
}
}
3. MvvmPatternFragment.fragment
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.Fragment
import my.android_study.R
import my.android_study.databinding.FragmentMvvmPatternBinding
class MvvmPatternFragment : Fragment() {
private lateinit var binding: FragmentMvvmPatternBinding
private lateinit var viewModel: MainViewModel
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_mvvm_pattern, container, false)
viewModel = MainViewModel()
binding.textSum.text = viewModel.getTotal().toString()
binding.buttonCount.setOnClickListener{
var num = 0;
if( binding.countEditText.text.toString() != ""){
num = binding.countEditText.text.toString().toInt()
}
viewModel.addNum(num)
binding.textSum.text = viewModel.getTotal().toString()
}
return binding.root
}
}