안녕하세요. 이번시간에는 viewBinding에 대해서 소개하겠습니다.
viewBinding = view + binding
bind는 사전적으로 묶다, 곤경, 감다의 뜻이 있습니다.
여기서는 to tie or wrap (something) with rope, string, etc. 의 뜻으로 사용되어
안드로이드의 View 들을 묶었다고 생각하고 공부를 하는게 좋을 것 같네요.
View binding is a feature that allows you to more easily write code that interacts with views. Once view binding is enabled in a module, it generates a binding class for each XML layout file present in that module. An instance of a binding class contains direct references to all views that have an ID in the corresponding layout.
In most cases, view binding replaces findViewById.
안드로이드 개발자 페이지의 내용입니다.
왜 findViewById 를 대체하려고 했을까요?!
메서드의 주석의 내용은 다음과 같습니다.
onCreate에서 처리된 XML에서 id 특성으로 식별된 View를 찾습니다.
반환: View가 발견된 경우 View를 리턴, 그렇지 않은 경우 null입니다.
null이 발생할 경우가 있는지 확인해 보곘습니다.
다음과 같이 해당 xml 의 파일의 존재하지 않은 activity_sub.xml 에 있는 View를
Resources 클래스인 R를 통해 참조 할 수는 있지만,
액티비티의 인플레이트 된 xml 레이아웃에는 해당 view의 id를 찾을 수 없으므로 null을 반환하게 됩니다.
하지만 viewBinding을 사용한다면 해당 xml과 바인딩된 객체변수를 통해서 접근하기 때문에
null을 발생하던 activity_sub.xml 에 요소들을 참조할 수 없습니다.
따라서 null을 방지할 수 있습니다.
기존 코드
public class MainActivity extends AppCompatActivity {
TextView textView;
EditText editText;
ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView=findViewById(R.id.tv_text_view);
editText=findViewById(R.id.et_edit_text);
imageView=findViewById(R.id.iv_image_view);
textView.setText("setText");
editText.setText(R.string.app_name);
imageView.setImageResource(R.drawable.ic_launcher_foreground);
}
}
viewBinding
public class MainActivity extends AppCompatActivity {
ActivityMainBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding=ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
binding.tvTextView.setText("setText");
binding.etEditText.setText(R.string.app_name);
binding.ivImageView.setImageResource(R.drawable.ic_launcher_foreground);
}
}
또한 다음과 같이 코드의 양도 줄일 수 있습니다.
더 많은 뷰를 사용할 때, 좀 더 편하게 사용 할 수있을 것 같습니다.
참조 :
https://developer.android.com/topic/libraries/view-binding
https://developer.android.com/reference/android/view/View#findViewById(int)
'안드로이드 자바' 카테고리의 다른 글
[Android][Java] 내 연락처 가져오기 (0) | 2023.01.20 |
---|---|
[JAVA][Android] BadgeDrawable을 활용하여 바텀 네비게이션 바에 뱃지 구현 (0) | 2023.01.16 |
[Java][Android] 마커 클릭 비활성화 (클릭 막기) (0) | 2023.01.13 |
[Android][Java] 토스트 메시지 꾸미기 (0) | 2023.01.09 |
[Android][Java] Javax로 이메일 전송 기능 구현 (4) | 2023.01.02 |