Android databinding, Java에서 사용하기

jong·2022년 5월 31일
0

Android Studio

목록 보기
3/3

findViewById()를 사용하면서 지저분하기도 하고, 더 쉽게 사용할 방법이 없을까 하면서 검색하다 보니 Data Binding이 있었다. findViewById()는 호출될 때마다 레이아웃 파일 트리를 순회하면서 찾기 때문에 비효율적이란 것을 처음 알게 되었다.

Data Binding은 레이아웃 파일을 중개해주는 오브젝트를 만들어 관리한다. 액티비티 입장에서는 해당 오브젝트의 속성에 접근하듯 사용이 가능하다. ex) binding.buttonid

Gradle

android {
	...
    
    buildFeatures {
        dataBinding true
    }
}

Data Binding을 사용하기 위해 build.gradle파일에 위와 같이 추가해서 기능을 활성화한다.

layout_file.xml

아래 코드와 같이 레이아웃 파일의 내용을 <layout>태그로 감싸준다. xml name space는 최상단 layout태그 쪽으로 움겨준다.

<?xml version="1.0" encoding="utf-8"?>
<layout 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">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:backgroundTint="@color/white"
        tools:context=".MainActivity">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <Button
                android:id="@+id/button"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/button" />
        </LinearLayout>

        <com.google.android.material.floatingactionbutton.FloatingActionButton
            android:id="@+id/floatingActionButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginEnd="16dp"
            android:layout_marginBottom="16dp"
            android:backgroundTint="@color/y_in_mn_blue"
            android:clickable="true"
            android:contentDescription="@string/add"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:srcCompat="@android:drawable/ic_input_add" />
    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

LayoutActivity.java

위 과정이 완료되면 레이아웃 파일의 이름에 다라 자동으로 데이터를 중개해주는 클래스가 생성된다. 예를 들어 activity_main.xml의 레이아웃 파일이 있다면 ActivityMainBinding과 같은 자료형이 생성된다.

public class MainActivity extends AppCompatActivity {
    private ActivityMainBinding binding;

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

        binding= DataBindingUtil.setContentView(this,R.layout.activity_main);
        binding.floatingActionButton.setColorFilter(ContextCompat.getColor(this,R.color.white));

    }
}

보다 자세한 내용은
https://roomedia.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B0%94%EC%9D%B8%EB%94%A9-in-Java#toc-layout_file.xml

profile
공부 기록

2개의 댓글

comment-user-thumbnail
2023년 5월 2일

제목은 viewBinding인데 내용은 dataBinding이네요.

1개의 답글