Android

[Kotlin] Viewbinding 뷰바인딩 사용하기

Wootaeng 2021. 12. 7. 10:54
728x90
안드로이드 공부 기록하기

 

대부분의 안드로이드 앱에서는 이 뷰와 코드 간의 상호작용을 구현해야 한다.

예를 들어, 사용자가 EditText 뷰에 입력한 값을 읽거나, TextView 에 보여 줄 데이터를 변경할 때다.

기 경우 코드에서 레이아웃 뷰를 참조할 수 있어야 하며 그동안 여러 가지 방법이 사용.

가장 오래되고 대중적인 방법은 'findViewById() 함수를 사용하는 것이다

val myTextView:vTextView = findViewById(R.id.myTextView)

이렇게 뷰의 참조를 얻으면 다음과 같이 뷰의 속성을 사용

myTextView.text = "Hello"

findViewById() 함수는 레이아웃 뷰를 사용할 수 있는 방법이지만 제약이 존재한다.

findViewById() 함수의 경우는 레이아웃에 아직 생성되지 않은 뷰의 참조를 얻을 수 있어서(null 상태) 해당 뷰의 속성을 사용하려 할 때 null 포인터 예외가 발생할 수 있다는 단점이 있다.

위의 점을 개선하기 위해 나온 방법이 뷰 바인딩이라는 형태로 레이아웃 뷰를 참조하는 것이다.

뷰 바인딩 활성화 하기

  • Gradle 에 추가
android {

    buildFeatures{
        viewBinding true
    }
}
  • MainActivity
class MainActivity : AppCompatActivity() {

    //private lateinit var binding: <바인딩 이름>
    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    //setContentView(R.layout.activity_main)
    //binding = <바인딩이름>.inflate(layoutInflater)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
    }

    fun convertCurrency(view: View){
        if (binding.dollarText.text.isNotEmpty()){
            val dollarValue = binding.dollarText.text.toString().toFloat()
            val euroValue = dollarValue*0.85F

            binding.textView.text = euroValue.toString()
        } else {
            binding.textView.text = getString(R.string.no_value_string)
        }
    }
}

위의 코드처럼 binding 을 통해 사용할 layout.xml 과 연결

findByViewId() 함수를 사용하지 않아도 참조가 가능해진다.

 

 

참고 : 핵심만 골라 배우는 안드로이드 스튜디오.

728x90
반응형