정말 구글은 개발자에게 친절한 듯 하네요.
좋은 라이브러리가 있어서 공유 하고자 합니다.
DataBinding을 할 수 있는 라이브러리인데요.
https://developer.android.com/topic/libraries/data-binding/index.html#studio_support
제가 이 라이브러리로 설명하고자 하는 내용은 아래 입니다.
1. findViewById는 이제 사용하지 않아도 된다.
2. 각 View를 전역 변수로 저장해서 사용하지 않아도 된다.
3. 각 View를 해당 View에 맞게 캐스트 할 필요가 없다.
The Data Binding Library offers both flexibility and broad compatibility — it's a support library, so you can use it with all Android platform versions back to Android 2.1 (API level 7+).
To use data binding, Android Plugin for Gradle 1.5.0-alpha1 or higher is required.
위와 같이 api 7 이상 Gradle plugin인은 1.5.0-alpha1 이상을 사용하라고 하네요. 참고하세요.
그럼 기존의 사용하던 형식을 볼까요?
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
TextView mTxtHello;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTxtHello = (TextView) findViewById(R.id.txt_hello);
}
}
위와 같이 View를 호출 했었습니다.
이전 ButterKnife 라이브러리를 이용하면 저런 수고를 덜 수 있는데, 저 같은 경우 버그가 제법 발생 해서 사용 안했었거든요.
그럼 DataBinding을 하면 어떻게 소스가 변하느냐.
import android.databinding.DataBindingUtil;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.gogorchg.nomorefindviewbyid.databinding.ActivityMainBinding;
public class MainActivity extends AppCompatActivity {
ActivityMainBinding mBinding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
mBinding.txtHello.setText("바인딩 성공!");
}
}
DataBindgUtil 이라는 클래스에 레이아웃을 정의 해주고,
return 받은 ActivityMainBinding을 이용하기만 하면 됩니다.
## 그럼 DataBinding을 사용 하는 방법을 알려드리겠습니다. (아주 간단함)
아래와 같이 app/build.gradle 에 추가해주세요.
android {
...
dataBinding {
enabled = true
}
}
그리고 res/layout/activity_main.xml 에 <layout ></layout>으로 감싸주시면 됩니다.
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.gogorchg.nomorefindviewbyid.MainActivity">
<TextView
android:id="@+id/txt_hello"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
</RelativeLayout>
</layout>
끝 입니다.
자 Sync를 다시 받으시거나 clean build를 하신 후 위와 같이 하시면 됩니다.
그럼 ActivityMainBinding 클래스는 어떻게 만들고! txtHello 는 어떻게 정의 하나요???
라는 질문이 무조건 들어와야 합니다. ㅎ (저도 그랬으니깐요)
답은 자동입니다!!!
ActivityMainBinding 클래스는 제가 xml 이름을 activity_main 으로 정의 했기 때문에 저런 식으로 만들어 진겁니다.
'_'를 중심으로 뒤쪽 문자가 대문자가 되는 것이죠.
activity_love.xml 일 경우는 ActivityLoveBinding 이라는 클래스가 자동 생성 되겠죠?
txtHello 도 마찬가지 입니다.
txt_hello 라가 id를 정의 하였기 때문에 txtHello가 되는 것이죠.
개발자 분들은 다른 셋팅은 신경 쓰지지 마시고 그냥 자동으로 만들어진 클래스를 사용하시면 됩니다.^^
## 혹시나 다 해도 클래스가 import 되지 않으시는 분들
1. 'Build -> Rebuild Project' 를 해보세요.
2. 'Sync Project with Gradle Files' 버튼을 눌러 보세요.
3. 그래도 안될 경우,
'Build -> Make Project' 를 해보세요.
그럼 될껍니다.^^
그럼 참고하세요.
'나의 플랫폼 > 안드로이드' 카테고리의 다른 글
[Android][DataBinding] ImageView src에 연동 하기 (함수 연결) (0) | 2016.07.08 |
---|---|
[Android]][DataBinding] String Format 적용하기 (0) | 2016.07.08 |
[Android] 내장 스피커로 연결 하기 (9) | 2016.06.27 |
[Android][Glide] Viewpager 에 이미지가 갱신 되지 않는 현상 (1) | 2016.06.22 |
[Android] 권한 그룹 리스트 (0) | 2016.06.15 |