Inflearn Community Q&A
DataBinding을 통해 버튼의 text를 바꿔보고 싶은데 생각처럼 동작하지 않습니다.
Written on
·
287
0
안녕하세요 선생님의 데이터 바인딩 강의를 보던 중 버튼을 누를 때마다 버튼의 텍스트를 바꿀 수는 없을지 해서 코드를 작성해봤습니다.
인터넷을 뒤져보니, xml에 <data> 와 그 안에 <variable> 을 잘 정의해주면 된다고 해서 <variable>의 name을 "activity" 라고 정하고 type은 기본으로 생성해준 MainActivity를 설정했습니다.
그리고 Button의 android:text의 값을 @{activity.text}라고 넣어줬습니다.(이후 MainActivity.kt 에서 생성해주었습니다.)
MainActivity.kt에서 text라는 이름을 가진 변수를 "0" 으로 초기화하고, xml에서 설정한 id를 binding 변수에서 찾아 text에 클릭할 때마다 1씩 증가하는 변수를 toString을 통해 넣어줬습니다. 혹시 몰라 Toast를 통해 text를 띄워보았습니다.
하지만 생각처럼 되지는 않았는데요. 혹시 왜인지 알 수 있을까요?
[XML]
<?xml version="1.0" encoding="utf-8"?>
<layout>
<data>
<variable
name="activity"
type="com.example.databinding_ex.MainActivity" />
</data>
<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/testBtnId"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:text="@{activity.text}"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</Button>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
[MainActivity.kt]
package com.example.databinding_ex
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.Toast
import androidx.databinding.DataBindingUtil
import androidx.databinding.ObservableField
import com.example.databinding_ex.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private var clickedCount = 1
var text = "0"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 2. with dataBinding
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
binding.testBtnId.setOnClickListener {
text =(clickedCount++).toString()
Toast.makeText(this, text, Toast.LENGTH_LONG).show()
binding.invalidateAll()
}
}
}firebasekotlinandroid






공유해주신 개복치개발자님의 유튜브 덕분에 문제점을 해결할 수 있었습니다.
감사합니다!