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
    }
}