본문 바로가기
안드로이드 자바

[JAVA][Android] View Binding으로 레이아웃 뷰 연결하기

by teamnova 2024. 8. 11.
728x90

 

 

안녕하세요 오늘은 View Binding 을 사용하여 액티비티에 레이아웃 뷰 요소를 연결해보도록 하겠습니다. 

 

 

 

findViewById의 동작 방식 

기존부터 사용되던 findViewById 메소드의 경우 런타임에 호출됩니다. 
On Create 메소드에서 setContentView 를 통해 레이아웃을 설정한 후 findViewById 를 호출하여 레이아웃 내의 특정 뷰를 찾습니다.  또한 뷰를 찾는 과정에서 루트 뷰를 시작으로 뷰 계층 구조를 순회하며 주어진 ID 값을 찾습니다. 

이는 뷰 계층 구조가 깊거나 뷰의 개수가 많을 경우, 성능에 영향을 미칠 수 있습니다. 

 


View Binding 의 동작 방식 

컴파일 타임에 생성된 모든 레이아웃에 대한 별도의 바인딩 클래스를 생성합니다. 
이 과정에서 레이아웃 파일의 이름을 PascalCase  형식으로 변환하여
각각 대응되는 바인딩 클래스를 자동으로 생성합니다. 

 

ex) hihimyname.xml, main_activity.xml, serverActivity.xml 총 3개의 레이아웃이 생성된 프로젝트의 경우 

이에 대한 바인딩 클래스로 HihimynameBinding, MainActivityBinding, ServerActivityBinding 클래스 파일이 자동 생성됩니다. 

 

위 바인딩 클래스를 사용하여, 해당 레이아웃 파일의 뷰에 접근할 수 있습니다 
아래는 예제 코드 입니다.

 

 

MainActivity.java 


import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;

import com.example.viewbindingexamples0808.databinding.ActivityMainBinding;
import com.example.viewbindingexamples0808.databinding.HihimynameBinding;

public class MainActivity extends AppCompatActivity {

    private ActivityMainBinding binding; // 자동생성된 ActivityMainBinding 
    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // View Binding 초기화
        binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());


        binding.textView1.setText("Updated First TextView");
        binding.textView53.setText("Updated Second TextView");
        binding.textView3.setText("Updated Third TextView");
        binding.textView4.setText("Updated Fourth TextView");




    }
}

 

 

 

activity_main.xml 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/parentLinearLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:id="@+id/firstLinearLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="First TextView" />

        <TextView
            android:id="@+id/textView53"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Second TextView" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/secondLinearLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Third TextView" />

        <TextView
            android:id="@+id/textView4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Fourth TextView" />
    </LinearLayout>
</LinearLayout>