Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 클래스
- 큐 자바 코드
- 안드로이드 레트로핏 crud
- rxjava disposable
- ANR이란
- 안드로이드 유닛 테스트
- ar vr 차이
- Rxjava Observable
- rxjava cold observable
- 안드로이드 레트로핏 사용법
- 스택 큐 차이
- 2022 플러터 설치
- 안드로이드 유닛테스트란
- 스택 자바 코드
- 멤버변수
- 안드로이드 os 구조
- 서비스 쓰레드 차이
- 2022 플러터 안드로이드 스튜디오
- android ar 개발
- 안드로이드 라이선스 종류
- jvm이란
- android retrofit login
- 안드로이드 라이선스
- 객체
- 서비스 vs 쓰레드
- rxjava hot observable
- jvm 작동 원리
- 플러터 설치 2022
- 안드로이드 유닛 테스트 예시
- 자바 다형성
Archives
- Today
- Total
나만을 위한 블로그
[Android] 커스텀 다이얼로그에서 데이터 바인딩 사용하는 법 본문
728x90
반응형
데이터 바인딩을 사용하면 기존에 사용하던 findViewById()를 사용하지 않아도 된다는 장점이 있어 코드량이 줄어드는 걸 볼 수 있다.
그래서 액티비티/프래그먼트에서 주로 사용하는데 이걸 커스텀 다이얼로그에서도 쓸 수 있지 않을까?
당연히 가능하다.
먼저 데이터 바인딩을 사용하기 위해 xml에 필요한 처리는 모두 해줘야 한다.
<layout>
<data>
<variable
name="이름 작성"
type="com.example.testproj.dialog.CustomDialog" />
</data>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
.
.
.
<layout> 태그 안에 부모 레이아웃을 넣어준다. 자식 레이아웃과 위젯 등은 당연히 부모 레이아웃 안에 있을 것이다.
그리고 <variable> 태그 안에 필요한 내용들을 작성해준다.
다음은 액티비티/프래그먼트에서 다이얼로그를 띄워주기 위한 public 메서드를 만들어야 한다.
이 때 아래와 같이 처리해준다.
// 아래 2줄은 전역변수로 선언한다. context는 생성자 매개변수로 넘기기 위해 선언했다
private Context context;
private MyDialogBinding binding;
.
.
.
public CustomEditNicknameDialog(Context context)
{
this.context = context; // 생성자에서 받은 컨텍스트를 커스텀 다이얼로그의 컨텍스트 변수에 매핑
}
.
.
.
public void showDialog()
{
final Dialog dialog = new Dialog(context);
binding = DataBindingUtil.inflate(LayoutInflater.from(context), R.layout.my_dialog, null, false);
}
액티비티/프래그먼트에서 커스텀 다이얼로그를 띄워주려면 컨텍스트가 필요하다.
그래서 그 컨텍스트를 매개변수로 넘겨서 다이얼로그 객체를 얻은 다음, 전역변수에 선언한 데이터 바인딩 변수에 inflate()로 미리 만들어둔 커스텀 다이얼로그 xml을 연결해준다.
저 inflate()의 원형은 아래와 같다.
// @Nullable don't annotate with Nullable. It is unlikely to be null and makes using it from
// kotlin really ugly. We cannot make it NonNull w/o breaking backward compatibility.
public static <T extends ViewDataBinding> T inflate(@NonNull LayoutInflater inflater,
int layoutId, @Nullable ViewGroup parent, boolean attachToParent) {
return inflate(inflater, layoutId, parent, attachToParent, sDefaultComponent);
}
아무튼 저렇게 선언해두면 그 다음부터는 binding을 참조해 xml에 만들어 둔 위젯, 레이아웃 등에 접근해 액티비티/프래그먼트 xml에서 했듯 다양한 처리가 가능해진다.
binding.textEraseView.setOnClickListener(//)
주의할 것은 데이터 바인딩을 사용하면 카멜 표기법으로 뷰 이름을 적어줘야 하지만 이는 몇 번 써보면 금방 익숙해질 것이다.
반응형
'Android' 카테고리의 다른 글
[Android] 로그에 사용할 태그 만드는 법 (0) | 2021.06.09 |
---|---|
[Android] 커스텀 다이얼로그 테두리 둥글게 만들기 (0) | 2021.06.09 |
[Android] Retrofit의 DELETE 사용 시 @Body를 사용할 경우 처리법 (0) | 2021.06.08 |
[Android] 커스텀 별점(RatingBar) 사용하기 (0) | 2021.06.06 |
[Android] All children of ConstraintLayout must have ids to use ConstraintSet 에러 해결 (0) | 2021.05.30 |
Comments