[Android Studio] 엑티비티 뷰 바인딩

hui·2023년 7월 27일

AndroidStudy

목록 보기
1/7
post-thumbnail

ViewBinding의 정의

findViewById() 메서드를 사용하지 않아도 레이아웃 파일을 기반으로하는 액티비티나 프래그먼트를 클래스 안 뷰에 참조 변수를 직접 할당할 수 있다. 뷰 바인딩은 안드로이드 데이터 바인딩과는 다른 기술이므로 혼동하지 않도록 주의!

👉 ViewBinding 예제

뷰 바인딩을 사용해 버튼을 누르면 토스트 메세지가 나오게 만들기.
(MainActivity, Fragment 에서 바인딩 방법이 다르기 때문에 두 가지로 해보겠습니다.)

레이아웃에 버튼 만들기

Activity에 맞는 레이아웃에서 설정.

<androidx.constraintlayout.widget.ConstraintLayout 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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

//	id 설정을 해줘야 바인딩 가능
    <androidx.appcompat.widget.AppCompatButton
        android:id="@+id/IdButton"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:text="클릭 시, 토스트 메세지"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

1) viewBinding 활성화

Gradle Scripts > build.gradle(Module: 프로젝트명)

android {
    // ..
    buildFeatures {
        viewBinding true
    }
}

위 코드를 작성 후 Sync Now 라는 메시지를 클릭해 그래들 수정을 확정.

2) Activity 에서 바인딩

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import com.example.a230727_viewbinding.databinding.ActivityMainBinding

private lateinit var binding: ActivityMainBinding

class MainActivity : AppCompatActivity() {
   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       //(1) 바인딩 생성
       val binding = ActivityMainBinding.inflate(layoutInflater);
       //(2) 최상위 레이아웃 표시
       setContentView(binding.root)
       
		//뷰 바인딩으로 버튼 접근
       binding.IdButton.setOnClickListener() {
           toast("버튼이 클릭 되었습니다.")
       }

   }
   fun toast(message: String){
       Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
   }

}
  • (1) 바인딩 초기화 : val binding = ActivityMainBinding.inflate(layoutInflater)

    레이아웃 파일명의 첫글자와 언더바( _ ) 다음 글자를 대문자로 바꾸고 (activity_login -> ActivityLogin),
    뒤에 Binding을 붙여 바인딩 생성하고, inflate 메서드는 인자로 전달된 레이아웃 파일을 기반으로 layoutInflater을 활용해 뷰 계층 구조를 만든다.

  • (2) 레이아웃에 표시 : setContentView(binding.root)

    최상위 뷰로 레이아웃을 설정한다.

👉 마무리

프래그먼트 바인딩도 조만간 정리하겠습니다~!!

profile
백엔드 개발자로 변신.

0개의 댓글