일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 함수형 프로그래밍
- 한달독서
- 재택근무
- 커스텀린트
- 북한살둘레길
- 목적중심리더십
- 아비투스
- 목적 중심 리더십
- 면접
- 안드로이드
- 어떻게 나답게 살 것인가
- 한달어스
- 지지않는다는말
- 한달브런치북만들기
- 베드트레이
- 자취필수템
- 1일1커밋
- 베드테이블
- 좌식테이블
- 브런치작가되기
- 소프시스 밤부 좌식 엑슬 테이블
- 프래그먼트
- 테트리스
- 끝말잇기
- T자형인재
- 슬기로운 온라인 게임
- 소프시스
- 한단어의힘
- 캐치마인드
- 리얼하다
- Today
- Total
정상에서 IT를 외치다
[Android, Databinding] BindingAdapter 사용해 보기 본문
안녕하세요. 블랙진입니다.
이전 시간에 데이터바인딩에 대한 기초를 포스팅했습니다.
이어서 심화 과정으로 BIndingAdapter 사용법에 대해 알아보겠습니다.
BindingAdapter 사용해보기
데이터 바인딩을 실무에 적용하기 위해서는 BindingAdapter 를 자유자재로 다룰 수 있어야 합니다.
ImageView, ListView, RecyclerView 등 기능이 복잡한 View 는 BindingAdapter 를 통해 데이터를 처리해주어야 하기 때문입니다.
BindingAdapter 에 관한 간단한 예제로 Glide 라이브러리를 사용하여 ImageView 에 이미지를 설정해 보겠습니다.
1. 서버로 부터 이미지를 받아야 되기 때문에 인터넷 접근 권한을 설정해줍니다.
AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
2. APP 단계의 build.gradle 에 Glide 를 추가해 줍니다.
//glide
implementation "com.github.bumptech.glide:glide:$glideVersion"
제가 사용한 glideVersion 은 3.7.0 입니다.
3. User.kt 에 profile 데이터(이미지 주소)와 BindingAapter 를 추가해 줍니다.
class User(val firstName: String, val lastName: String, val profile: String) {
object MyBind {
@JvmStatic
@BindingAdapter("setImage")
fun setImageUrl(view: ImageView, profile: String) {
Glide.with(view.context)
.load(profile)
.into(view)
}
}
}
BindingAdapter 는 메모리 상에 올려서 사용해야 하기 때문에 자바에서는 static, 코틀린 에서는 object 로 설정해서 사용해 줍니다.
(참고) 아래는 자바 코드일 때의 User.class 에 관한 코드입니다.
public class User {
public String firstName;
public String lastName;
public String profile;
@BindingAdapter("setImage")
public static void setImageUrl(ImageView view, String profile){Glide.with(view.getContext())
.load(profile)
.into(view);
}
}
4. activity_main.xml 에 ImageVIew 를 추가합니다.
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<!-- data 이름을 user 로 설정하였습니다. -->
<!-- type 은 User 클래스 위치와 함께 표시되어야 합니다. -->
<variable name="user" type="com.tistory.black_jin0427.mydatabinding.User"/>
</data>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- user 의 firstName 을 설정해줍니다. -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.firstName}"/>
<!-- user 의 lastName 을 설정해줍니다. -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.lastName}"/>
<!-- user 의 profile 을 설정해줍니다. -->
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
setImage="@{user.profile}"/>
</LinearLayout>
</layout>
ImageView 는 BindingAdapter 에서 정한 setImage 를 추가해 주고 user 객체에서 profile (이미지 주소) 를 가져옵니다.
5. User 객체에 profile 데이터를 추가해 줍니다.
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//setContentView(R.layout.activity_main)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
binding.user = User("Black","Jin", "https://t1.daumcdn.net/cfile/tistory/2511E03B577BB58733")
}
}
추가할 데이터는 구글에서 찾은 마블 이미지 입니다.
이렇게 BindingAdapter 에 관한 기초적인 내용을 살펴 보았습니다.
데이터 바인딩에 관해 더 공부하실 분인 안드로이드 공식 사이트 에서 내용을 확인해 주세요
'안드로이드' 카테고리의 다른 글
[Android, ViewPager] 프래그먼트 뷰페이저 만들기 (0) | 2018.09.05 |
---|---|
[Android] 그라데이션 효과 적용하기 (0) | 2018.08.31 |
[Android, Proguard] 안드로이드 프로가드 설정하기 (10) | 2018.08.24 |
[Android_ID] Android 0 대응 하기 - Android Id 변경 (2) | 2018.08.23 |
[Android, Camera] 3. 카메라 프리뷰를 이용한 화면 캡처 및 배경 이미지 적용 (6) | 2018.08.22 |