728x90
안녕하세요 오늘은 View Binding 을 사용하여 액티비티에 레이아웃 뷰 요소를 연결해보도록 하겠습니다.
findViewById의 동작 방식
기존부터 사용되던 findViewById 메소드의 경우 런타임에 호출됩니다.
On Create 메소드에서 setContentView 를 통해 레이아웃을 설정한 후 findViewById 를 호출하여 레이아웃 내의 특정 뷰를 찾습니다. 또한 뷰를 찾는 과정에서 루트 뷰를 시작으로 뷰 계층 구조를 순회하며 주어진 ID 값을 찾습니다.
이는 뷰 계층 구조가 깊거나 뷰의 개수가 많을 경우, 성능에 영향을 미칠 수 있습니다.
View Binding 의 동작 방식
컴파일 타임에 생성된 모든 레이아웃에 대한 별도의 바인딩 클래스를 생성합니다.
이 과정에서 레이아웃 파일의 이름을 PascalCase 형식으로 변환하여
각각 대응되는 바인딩 클래스를 자동으로 생성합니다.
ex) hihimyname.xml, main_activity.xml, serverActivity.xml 총 3개의 레이아웃이 생성된 프로젝트의 경우
이에 대한 바인딩 클래스로 HihimynameBinding, MainActivityBinding, ServerActivityBinding 클래스 파일이 자동 생성됩니다.
위 바인딩 클래스를 사용하여, 해당 레이아웃 파일의 뷰에 접근할 수 있습니다
아래는 예제 코드 입니다.
MainActivity.java
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import com.example.viewbindingexamples0808.databinding.ActivityMainBinding;
import com.example.viewbindingexamples0808.databinding.HihimynameBinding;
public class MainActivity extends AppCompatActivity {
private ActivityMainBinding binding; // 자동생성된 ActivityMainBinding
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// View Binding 초기화
binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
binding.textView1.setText("Updated First TextView");
binding.textView53.setText("Updated Second TextView");
binding.textView3.setText("Updated Third TextView");
binding.textView4.setText("Updated Fourth TextView");
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/parentLinearLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:id="@+id/firstLinearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="First TextView" />
<TextView
android:id="@+id/textView53"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Second TextView" />
</LinearLayout>
<LinearLayout
android:id="@+id/secondLinearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Third TextView" />
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Fourth TextView" />
</LinearLayout>
</LinearLayout>
'안드로이드 자바' 카테고리의 다른 글
[JAVA][Android] 키보드에 글자가 가려지는 경우 setStackFromEnd 사용 // RecyclerView 스크롤 키보드 (0) | 2024.08.15 |
---|---|
[JAVA][Android] 라디오 버튼 그룹 만들고 클릭 이벤트 감지하기 (0) | 2024.08.13 |
[JAVA][Android] CustomTextWatcher 사용해서 컴마, 원화 표시하기 (0) | 2024.08.10 |
[JAVA][Android] 클릭한 라디오 버튼 배경 다르게 설정하기 (0) | 2024.08.07 |
[JAVA][Android] RecyclerView의 간격을 조정하기 (0) | 2024.08.05 |