Android Data Binding 데이터 바 인 딩 상세 설명
DataBinding 을 소개 하기 전에 그 환경 을 구축 하 는 것 을 배 워 야 합 니 다.작년 에 발 표 된 것 을 감안 하여 현재 AS 버 전 은 1.5 이상 일 것 입 니 다.1.5 버 전에 서 구축 하고 소개 하 겠 습 니 다.1.5 이전 에는 인터넷 에서 검색 할 수 있 습 니 다.제 가 보기 에는 인터넷 에서 대부분 1.3 의 사용 방법 을 소 개 했 기 때문에 1.5 이후 의 환경 구축 방법 에 대해 많이 알 지 못 했 습 니 다.
환경 구축
Android 의 Gradle 플러그 인 버 전 은 1.5.0-alpha 1 보다 낮 지 않 습 니 다.
classpath ‘com.android.tools.build:gradle:1.5.0'
그리고 해당 모듈(Module)의 build.grade 를 수정 합 니 다.
android {
....
dataBinding {
enabled = true
}
}
메모:Android stuido 의 버 전 은 1.3 이상 이 어야 합 니 다.또한 Android Studio 는 현재 binding 대상 에 대해 자동 코드 알림 이 없고 컴 파일 할 때 만 검사 합 니 다.이렇게 간단 하지만 1.3 과 예전 버 전 은 환경 구축 에 있어 조금 번 거 로 울 수 있 습 니 다(괜 찮 습 니 다.1.3 의 환경 구축 방법,인터넷 이 많 습 니 다).
기초 전시
우 리 는 구체 적 인 설명 을 하기 전에 간단 한 예 를 들 어 기 초 를 배우 고 DataBinding 의 커 다란 매력 을 보 여 드 리 겠 습 니 다.간단 한 특성 에 끌 릴 것 같 습 니 다.
우선 자바 bean 을 만 들 면 아주 간단 한 사용자 클래스 입 니 다.
package loonggg.net.databinding.bean;
/**
* Created by loongggdroid on 2016/3/14.
*/
public class User {
private String name;
private String age;
public User(String name, String age) {
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(String age) {
this.age = age;
}
public String getName() {
return this.name;
}
public String getAge() {
return this.age;
}
}
그 다음 에 DataBinding 을 사용 한 후의 레이아웃 파일 이 어떤 모습 인지 볼 까요?주요 변 화 는 layot 레이아웃 파일 에 있 습 니 다.
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="user"
type="loonggg.net.databinding.bean.User" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.name}" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.age}" />
</LinearLayout>
</layout>
여 기 를 보 니 누 군 가 는 헷 갈 리 기 시 작 했 을 것 입 니 다.컨트롤 에 id 를 정의 하지 않 고@{}방법 을 사 용 했 습 니 다.어떻게 된 일 입 니까?먼저 바 쁘 지 않 습 니 다.이따가 설명해 드 리 겠 습 니 다.값 을 어떻게 전달 하 는 지,Activity 에서 어떻게 사용 하 는 지 다시 보 겠 습 니 다.
package loonggg.net.databinding;
import android.app.Activity;
import android.databinding.DataBindingUtil;
import android.os.Bundle;
import loonggg.net.databinding.bean.User;
import loonggg.net.databinding.databinding.ActivityMainBinding;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
User user = new User("loonggg", "23");
binding.setUser(user);
}
}
Activity 를 보 니 깔끔 하고 상쾌 한 느낌 이 들 었 습 니 다.컨트롤 의 초기 화 findView ById 가 없 었 습 니 다.그리고 setText()로 가서 두 줄 의 코드 만 추 가 했 습 니 다.실행 결 과 는 말 할 필요 도 없 이 분명 loonggg 와 23 이 표 시 될 것 입 니 다.효과 도 는 다음 과 같 습 니 다.
기초 해석
레이아웃 생명
예 를 들 어 우 리 는 소 개 를 끝 냈 습 니 다.예 에 나타 난 새로운 것들 에 대해 설명 할 필요 가 있 습 니 다.자바 빈 에 게 는 설명 하지 않 습 니 다.모두 가 알 고 있 을 것 입 니 다.우 리 는 레이아웃 파일 부터 말 하 겠 습 니 다.이전에 사 용 했 던 xml 에 비해 루트 노드 는 구체 적 인 특정한 layot(예 를 들 어 LinearLayout)에서 layot 로 바 뀌 었 고 그 안에 data 노드 와 전통 적 인 보 기 를 포함 했다.이곳 의 data 노드 는 마치 View 와 Modle 을 연결 하 는 다리 와 같다.이 data 노드 에서 variable 변 수 를 설명 하면 레이아웃 파일 에 쉽게 전달 할 수 있 습 니 다.
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<!--type User, , , user-->
<data>
<variable
name="user"
type="loonggg.net.databinding.bean.User" />
</data>
<LinearLayout>
……
</LinearLayout>
</layout>
변수 이름 user변수 형식 은"loonggg.net.databinding.bean.User"입 니 다.
type 에서 설명 한 것 은 바로 우리 의 사용자 실체 류 User 입 니 다.반드시 다 쓰 고 가방 이름 을 가 져 가 야 합 니 다.우 리 는 이 실체 류 에 user 라 고 명명 합 니 다.TextView 의@{user.name}은 바로 이 user 의 이름 을 보 여 주 는 것 입 니 다.age 역시 마찬가지 입 니 다.
바 인 딩 변수
레이아웃 파일 에 대응 하지만 값 은 어떻게 들 어 갑 니까?이것 이 바로 우리 가 사용 하고 자 하 는 Activity 의 두 줄 코드 입 니 다.이것 은 실체 류 와 레이아웃 파일 을 연결 합 니 다.MainActivity 의 onCreate 를 수정 하고 DatabingUtil.setContentView()로 setContentView()를 교체 한 다음 user 대상 을 만 들 고 bing.setUser(user)를 통 해 variable 와 연결 합 니 다.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
User user = new User("loonggg", "23");
binding.setUser(user);
}
고급 용법import 용법
사실 data 노드 도 import 용법 을 지원 합 니 다.예 를 들 어:
<data>
<import type="loonggg.net.databinding.bean.User "/>
<variablename="user"type="User" />
</data>
여기 서 주의해 야 할 것 은 import 는 자바 처럼 import xx.xxx.*를 사용 할 수 없습니다.가 져 올 클래스 이름 을 구체 적 으로 써 야 합 니 다.유명무실 하 다
여기까지 와 서 import 에 같은 이름 의 두 종류 가 있 으 면 어떻게 하 냐 고 물 어 볼 수도 있 습 니 다.겁 먹 지 마 세 요.사람들 이 주도면밀 하 게 생각 하 는데 별명 이나 닉네임 을 지어 도 될까요?예 를 들 면:
・・・
<data>
<import type="xxx.User" alias="MyUser">
<import type="xxx.xx.User">
<variable
name="user"
type="User" />
<variable
name="myUser"
type="MyUser"/>
</data>
<TextView xxx:@{myUser.getName()}>
<TextView xxx:@{user.getName()}>
・・・
변수 정의 고급 용법위 에서 우 리 는 xml 에서 간단 한 변 수 를 정의 하 는 방법 을 배 웠 다.우 리 는 List,Map 등 과 같은 집합 변 수 를 정의 하지 않 았 다.그렇다면 이런 집합 변 수 는 어떻게 정의 해 야 합 니까?사실 정의 방식 은 우리 위의 기본 과 일치 합 니 다.차이 점 은 바로 우리 가 키 의 변 수 를 정의 해 야 한 다 는 것 입 니 다.예 를 들 어:
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<import type="android.graphics.Bitmap" />
<import type="java.util.ArrayList" />
<import type="java.util.HashMap" />
<!-- -->
<variable
name="list"
type="ArrayList<String>" />
<variable
name="map"
type="HashMap<String, String>" />
<variable
name="array"
type="String[]" />
<!-- -->
<variable
name="listKey"
type="int" />
<variable
name="mapKey"
type="String" />
<variable
name="arrayKey"
type="int" />
<!-- , int -->
<variable
name="str"
type="String"/>
<variable
name="error"
type="boolean"/>
<variable
name="num"
type="int" />
</data>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{list[listKey]}"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{map[`name`]}"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{array[0]}"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{str}"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{String.valueOf(num)}"/>
</LinearLayout>
</layout>
이벤트 바 인 딩xml 에서 android.view.View.OnClickListener 를 직접 가 져 오고 클릭 이 벤트 를 만 들 수 있 습 니 다.
<variable
name="clickListener"
type="android.view.View.OnClickListener" />
...
android:onClick="@{clickListener}"
...
holder.binding.setClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//do something
});
표현 식사실 xml 파일 에 서 는 표현 식 을 지원 합 니 다.예 를 들 어 다음 과 같 습 니 다.
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text='@{error ? "error" : "ok"}'/>
이것 은 불 값 의 사용 이다.다음은 표현 식 이 지원 하 는 문법 과 지원 하지 않 는 문법 을 살 펴 보 겠 습 니 다.
지원 하 는 표현 식:
xml 파일 에 있 는 컨트롤 의 할당 도 자바 파일 에서 자바 로 이 루어 질 수 있 습 니 다.저 는 맨 위 에 있 는 간단 한 예 로 TextView 에 설 치 된 id 가 다음 과 같 습 니 다.
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
Activity 에서 이렇게 값 을 부여 합 니 다:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
binding.name.setText(" ");
}
여기 서 기본 적 인 부분 을 보면 다 말 할 수 있 습 니 다.사실은 더 고 급 스 러 운 용법 도 많 습 니 다.예 를 들 어 ListView 에서 어떻게 사용 하 는 지 등 은 여러분 이 자 료 를 찾 아 보고 공부 할 수 있 습 니 다.이렇게 하면 더욱 깊이 알 수 있 습 니 다.이 글 이 모두 에 게 도움 이 되 기 를 바 랍 니 다.DataBinding 은 지금부터 사용 해 보 실 수 있 습 니 다.이상 은 Android Data Binding 데이터 에 연 결 된 자 료 를 정리 한 것 입 니 다.추 후 관련 자 료 를 계속 보충 하 겠 습 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.