Moments of growth

양방향 데이터 바인딩 🛠 본문

Android [Kotlin] 💻🤍

양방향 데이터 바인딩 🛠

뮤링이 2022. 4. 21. 18:09

LoginViewModel.kt

val loginEmail = MutableLiveData("")
val loginPw = MutableLiveData("")

- 뷰모델에 라이브 데이터 Email, Pw 만들어준다.

 

 

activity_login.xml

<data>
    <variable
        name="viewModel"
        type="org.seemeet.seemeet.ui.viewmodel.LoginViewModel" />
</data>
<EditText
    android:id="@+id/et_email"
    android:text="@={viewModel.loginEmail}"
    ...
/>
<EditText
    android:id="@+id/et_email"
    android:text="@={viewModel.loginPw}"
    ...
/>

- 양방향 데이터 사용

 

<androidx.appcompat.widget.AppCompatButton
    android:id="@+id/btn_login"
    isPossibleEmail="@{viewModel.loginEmail}"
    isPossiblePw="@{viewModel.loginPw}"
    ...
/>

- 인자 두개 넘겨주기

 

 

BindingAdapters.kt

@JvmStatic
@BindingAdapter("isPossibleEmail", "isPossiblePw")
fun isPossible(button: AppCompatButton, email : String?, pw : String?) {
    val pattern: Pattern = Patterns.EMAIL_ADDRESS
    val state : Boolean = (pw.isNullOrBlank() || email.isNullOrBlank() || !pattern.matcher(email).matches())
    if (state) {
        button.inactiveBtn(R.drawable.rectangle_gray04_10)
    } else
        button.activeBtn()
}

- fun isPossible의 인자 두개(email, pw)를 xml에서 따로 받아야함

isPossibleEmail="@{viewModel.loginEmail}"
isPossiblePw="@{viewModel.loginPw}"

이런식으로 넣는데 동시에 계속 들어가는 것임 인자 두개를 나눠서 준다고 생각!

여기서 이메일 형식이 맞는지, pw값이 null인지, email 값이 null인지 다 판별해서 Boolean 형태로 버튼 활성화 또는 비활성화

 

 

LoginActivity.kt

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = DataBindingUtil.setContentView(this, R.layout.activity_login)
    binding.lifecycleOwner=this
    binding.viewModel = viewModel
    ...
}

- 주의: lifecycleOwner와 viewModel 코드 까먹지 않기!

Comments