| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 장인한과
- 모두의 네트워크
- 성공했으면 꿀팁! 이런거라도 적는데 그게 아니니 뭐 적을게 없네요
- TCP/IP 모델
- 코닥 미니샷2
- 네트워크 기초
- android xml 화면 검은색
- android xml 오류
- OSI 모델
- xml 화면
- KakaoMap API
- kakaomap
- network
- git 충돌
- git #
- clone vs pull
- 약과팅 경험!
- 회사 네트워크
- git
- FCS
- 장인약과
- xml화면 검은색
- 안드로이드 xml 화면 오류
- 카카오맵 api
- 역캡슐화
- 약과팅
- Android
- Git 기초
- 전기신호
- 가정 네트워크
- Today
- Total
괴발개발
[Android] About DataBinding 본문
findViewByid()는 안 쓴지 꽤 되었다.
findViewByid 에 대한 공식문서의 설명은 이와 같다.
만약 MainActivity.java에서 activity_main.xml의 버튼 한개를 findViewByid 로 정의한다고 하면, 이렇게 된다.
activity_main.xml
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.java
package com.example.fragment;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=findViewById(R.id.btn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(),"this is button",Toast.LENGTH_SHORT).show();
}
});
}
}
위 코드 처럼 findViewByid를 사용할 땐
button = findViewByid(R.id.btn)
이렇게 정의해야한다.
정의해야할 요소가 몇개 안 된다면 괜찮지만 만약 버튼이 100개, 200개..늘어간다면 하나하나 정의하는 과정은 쓸데없이 시간낭비만 한다.
이런 단점을 보완하기 위해 만들어진것이 바로 DataBinding이다.
DataBinding :
xml 파일의 data를 binding(연결) 하여 사용 가능한 기능이다.
이 방법을 사용하면 모든 요소마다 정의를 해야했던 findViewByid와 달리 코드 간소화가 가능하다.
DataBinding 실행방법
1.
build.gradle은 Project, Module 두 개의 파일로 나뉜다. 이때
build.gradle(Project: ...) : 모든 서브 프로젝트, 모듈에 적용되는 최상위 빌드 파일이며, common configs를 포함하여야함.
build.gradle(Module: ...)은: 해당 모듈에만 적용되는 구성 파일 >> 데이터 바인딩에 대한 권한은 이쪽에 적용하는게 맞음.
android {
compileSdkVersion 30
buildToolsVersion "30.0.3"
dataBinding {
enabled true
}
}
build:gradle(module)의 android { } 안에 넣어준다.
2. activity_main.xml의 코드를
<layout> 으로 감싸고 난뒤, 안에 <data> <variable> 태그를 넣는다.
이때 type은 package path를 넣으면 된다.
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="main"
type="com.example.fragment.MainActivity" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
3.
2에서 <data>를 넣어줌에 따라 자동으로 생성된 ActivityMainBinding 자료형으로 binding을 정의한다.
기존에 oncreate안에 정의되어있던 setContentView(R.layout.activity_main)을 삭제하고,
binding을 사용하면 앞서 만든 기능 그대로 사용 가능하다.
package com.example.fragment;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.example.fragment.databinding.ActivityMainBinding;
public class MainActivity extends AppCompatActivity {
private ActivityMainBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
binding.btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(),"test",Toast.LENGTH_SHORT).show();
}
});
}
}
'Study > Android Studio' 카테고리의 다른 글
| [Android] About ViewBinding (0) | 2022.04.14 |
|---|---|
| [ToolBar] 툴바는 항상 헷갈려 (1) (0) | 2022.03.23 |
| [android Studio] noactionbar 설정 후, 다크모드로 적용될때 (0) | 2022.01.14 |