일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- #android #안드로이드 #glide #gif #이미지다운로드
- 안드로이드해상도
- 안드로이드 익명클래스
- 클린아키텍쳐
- retrofi
- #리사이클러뷰
- 메모리릭
- 안드로이드 메모리릭
- #ContentProvider #App DataShare
- 구글맵안돼요
- retrofit
- 안드로이드 아키텍쳐
- MVVM
- 제플린
- 빗버킷 #bitbucket #authorization failed #깃
- 안드로이드
- 사용법
- 키스토어
- retrofit2
- #안드로이드 개발자 #안드로이드 신입 #개발자 이직 #안드로이드 면접 #신입 개발자
- #안드로이드
- #리사이클러뷰 어댑터
- 리사이클러뷰 체크박스
- 레트로핏
- #SMS API #안드로이드 SMS #SMS Retriever
- zeplin
Archives
- Today
- Total
땀이 삐질삐질 나는 개발 일기
FindViewById() 대체제 Databinding 본문
안녕하세요. 삐질삐질 개발하는 개발자 삐질입니다.
이번 시간에는 우리가 기본적으로 안드로이드에서 XML과 연결할 때 View의 아이디를 찾아 연결하게 됩니다.
하지만 xml에 만들었던 View Component마다 Java class에서 매번 멤버 변수로 선언 해 주기에는
우리의 손가락 관절이 너무 아프다는 현실이 존재합니다.
그 대안을 위한 것으로 Databinding을 소개하려 합니다.
- Databinding이 현재 소개하려는 목적을 주목적으로 하진 않습니다.
- 지금 소개하는 이유는 부가적인 기능으로써 소개하는 것일 뿐입니다.
Databinding이 무엇일까요?
Data 를 View와 묶는 것을 뜻합니다. 안드로이드 구조에서는 XML파일의 루트 뷰그룹 아래에
<layout></layout>으로 감싸주게 된다면 내부 자동생성 로직에 의하여 태그로 묶인 xml이
Auto Generating 되어서 각 View Component의 세부적인 사항들이 BindingGenerated 클래스에 담겨지게 됩니다.
예시로 아래 코드를 보겠습니다.
먼저 App Level의 Gradle파일에
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.ppizil.renderactivityitem_from_recyclerview"
minSdkVersion 21
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
}
}
dataBinding {
enabled = true
}
}
요렇게 dataBidning{ enabled =true } 코드만 추가해주시면 기본적으로 데이터 바인딩의 세팅이 되었습니다.
다음으로 xml코드
<?xml version="1.0" encoding="utf-8"?>
<layout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/reyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent">
</androidx.recyclerview.widget.RecyclerView>
</layout>
이렇게 작성을 하시고 (보통은 수~초 후 자동으로 안스가 Auto Generating을 해주지만,) Build를 누르게 되시면
요렇게 클래스가 생기게 됩니다. ( <layout></layout>)으로 묶은 xml들에 한하여 생성됩니다.
이렇게 생성이 되었다면, 우리는 실제 MainActivity.java 또는 View를 다루는 Class에서
이렇게 접근이 가능합니다.
setContentView(R.layout.activity_main) 과 DatabindingUtil.~~이 같은 역할을 합니다.
이로써 우리는 일일이 액티비티에 TextView textview = FindViewById(Rid.text); 같은 번거로운 작업을 하지 않아도 되게 되었습니다.
- 주의 : 각 Activity, Fragment , Adapter에서 binding 객체를 할당하는 방법은 다릅니다.
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//1. activity
binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
}
--------------
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
//2. fragment
binding = DataBindingUtil.inflate(inflater,R.layout.activity_main,container,false);
return binding.getRoot();
}
-------------
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//3. adapter
ItemEntityBinding binding = ItemEntityBinding.inflate(LayoutInflater.from(parent.getContext()),false);
return new ItemViewHolder(binding.getRoot());
}
각 상화에 맞게 사용해주시면 되겠습니다.
이상 Databinding의 간단한 소개였습니다.
안드로이드 초보 개발자를 위해 아래와 같은 카카오 오픈톡을 운영 중입니다.
'개발 Tip' 카테고리의 다른 글
RecyclerView Adapter에서 ViewHolder를 Nested Static Class 로 사용하는 이유. (0) | 2019.07.21 |
---|---|
Retrofit2 기본 사용법 (4) | 2019.07.19 |
Recyclerview와 ViewHolder의 개념 (2) | 2019.07.15 |
Recyclerview의 아이템 클릭을 CallbackListener를 통해 Activity까지 가져오기 (0) | 2019.07.08 |
리사이클러뷰 아이템 액티비티로 전달하기 (0) | 2019.07.06 |
Comments