안녕하세요
오늘은 누구나 사용할 수 있는 DataBinding을 사용해 보려고 합니다.
우리는 기존 xml에 있는 버튼을 가져다 쓰거나 클릭이벤트를 만들거나, 또는 텍스트뷰를 선언해서 사용할 때
findViewById()를 사용하고 있었는데요
findViewById()의 단점은 역시 화면이 너무 지저분 해진다는점 ? 코드가 노가다라는 점이 있습니다.
바로 예제로 비교해드리도록 하겠습니다.
0. Default View
저희가 이런 기본적인 화면을 구성한다고 예를 들어봅시다.
1. findViewById()
0번에 있는 뷰를 구성하여 사용하기 위해서는
activity_main.xml
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button1" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button2" />
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button3" />
<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button4" />
<Button
android:id="@+id/button5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button5" />
MainActivity.java
Button button1, button2, button3, button4, button5;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1 = findViewById(R.id.button1);
button2 = findViewById(R.id.button2);
button3 = findViewById(R.id.button3);
button4 = findViewById(R.id.button4);
button5 = findViewById(R.id.button5);
}
이런식으로 화면을 구성해야 합니다.
지금 제가 예시로 5개만 구현했지만 여기에 다른 textview, button, 이런게 수없이 추가될 수 있거나 다른 동작들을 하게 된다면 더 많은 노가다를 구현 해야겠죠
또한 버튼 클릭 이벤트라던지 이러한 기능들이 추가된다면 더욱 노가다 코드를 작성해야 합니다.
https://coding-oneday.tistory.com/6
그래서 이러한 불편함과 노가다를 해결하기 위해 버터나이프를 사용했습니다.
하지만 그래도 .java 파일에 코드를 작성해야 하는 단점이 있었죠.
하지만 DataBinding을 사용한다면 ?
따로 View를 정의하지 않아도 알아서 연결을 해준다는 점.
불필요한 정의 코드를 줄일 수 있다는 점.
선언하고, 정의하고 불러오고 다시 쓰는 그 모든 코드가 줄어듭니다.
그러면 DataBindng을 사용하기 위해서 어떤 환경이 필요할까요 ?
1. build.gradle(Module.app)
android{
..
dataBinding{
enabled = true
}
}
dataBinding enabled true 만 설정 해주시면 됩니다.
2. activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
// 위에서 선언한 layout 뷰 소스를 그대로 사용하였습니다.
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
..
</layout>
이런식으로 layout 전체를 한번 감싸주기만 하면 됩니다.
이런식으로 구성해준 후 Rebuild를 한번 해주어야
MainActivity.java 화면에 ActivityMainBinding이 표시되는 것을 확인하실 수 있습니다.
3. MainActivity.java
기존에 사용하던 setContentView가 아닌 DataBindingUitl.setContentView를 사용하시면 됩니다.
이렇게 3번까지 세팅을 완료하셨다면 기존에 정의했던 버튼 텍스트 입력을 DataBinding 에서는 어떻게 불러올까요 >?
너무 간단합니다. 이미 연결이 되어있는 상태이기 때문에
ActivityMainBinding activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
activityMainBinding.button1.setText("TEST");
따로 정의할 필요 없이 그냥 .setText 해서 사용하시면 됩니다.
간단한 DataBindnig 사용 방법에 대해 알아봤습니다.
DataBinding 활용 추가 글 작성도 곧 업로드 하도록 하겠습니다.
아 Activity 말고 Fragment 사용은
위의 1번 2번 방법과 동일하며
3번 .java 화면에서
// View view = inflater.inflate(R.layout.fragment_detail, container, false);
기존 이렇게 사용하던 코드를
Fragmentbinding = DataBindingUtil.inflate(inflater,R.layout.fragment_detail, container, false);
이렇게 변경해주시면 됩니다.
감사합니다.
Sample Code Git : https://github.com/wp01053/DataBinding_Example
'Android > JAVA' 카테고리의 다른 글
Android Retrofit2 (안드로이드 레트로핏) 사용방법 (11) | 2020.03.20 |
---|---|
Android RecyclerView (안드로이드 리사이클러뷰) 사용 방법 (0) | 2020.03.16 |
Android Floating Action Button 사용하기 (2) | 2019.01.24 |
Android 여러가지 Button 사용방법 (1) | 2019.01.23 |
Android SharedPreferences 사용 방법 (2) | 2019.01.23 |