뷰 모델을 작성하면서 findViewById에 불편함을 느꼇다.
작년까지만 해도 코틀린 익스텐션을 지원했지만 이번 년도에는 지원을 하지 않는다고 한다.
코틀린 익스텐션을 지원하지 않는 이유를 찾아 보니 아래와 같은 문제점이 있어서 지원하지 않는다고 한다.
- 전역 네임스페이스 오염
- 코틀린에서만 실행됨
- Null 허용 여부를 알려주지 않음
안드로이드는 코틀린 익스텐션 대신 뷰 바인딩을 권장을 한다.
뷰 바인딩은 Null로부터 안전하며, 빠른 컴파일이 된다는 장점이 있다.
적용방법
app.gradle
android{
buildFeatures{
viewBinding = true
}
}
MainActivity.kt (저번 뷰모델글 중 메인 엑티비티랑 비교하면 많이 줄어들었습니다)
package com.example.viewmodel_tutorial
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import androidx.activity.viewModels
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.get
import com.example.viewmodel_tutorial.databinding.ActivityMainBinding
import java.lang.Integer.parseInt
class MainActivity : AppCompatActivity(), View.OnClickListener {
private val myNumberViewModels : MyNumberViewModel by viewModels()
private var mBinding: ActivityMainBinding? = null
private val binding get() = mBinding!!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mBinding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
myNumberViewModels.currentValue.observe(this, Observer{
binding.textView2.text = it.toString()
})
binding.button.setOnClickListener(this)
binding.button2.setOnClickListener(this)
}
override fun onClick(v: View?) {
val userInput:Int = parseInt(binding.EditText.text.toString())
when(v){
binding.button->
myNumberViewModels.updateValue(actionType = ActionType.PLUS, userInput)
binding.button2->
myNumberViewModels.updateValue(actionType = ActionType.MINUS, userInput)
}
}
}
'안드로이드 > 잡다한 지식' 카테고리의 다른 글
Detecting camera features with Camera2 (0) | 2021.11.24 |
---|---|
안드로이드 JCenter Deprecated 소식 (0) | 2021.10.20 |
ViewModel 및 사용 (0) | 2021.07.12 |
안드로이드 스튜디오 EditText 밑줄 제거 (0) | 2021.03.02 |
안드로이드 스튜디오 Recycler View 사용 (0) | 2021.02.18 |