DataBinding을 통해 버튼의 text를 바꿔보고 싶은데 생각처럼 동작하지 않습니다.
297
작성한 질문수 4
안녕하세요 선생님의 데이터 바인딩 강의를 보던 중 버튼을 누를 때마다 버튼의 텍스트를 바꿀 수는 없을지 해서 코드를 작성해봤습니다.
인터넷을 뒤져보니, 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()
}
}
}
답변 2
1
위의 링크로 공유드린 강의를 통해서 한번 활용해보시고, 잘 안되시면 좀 더 자세히 작성한 코드를 설명해주시면 도움드릴 수 있을 것 같습니다.
1
안녕하세요 재헌님
생각되로 되지 않는다는게 어떤 의미이실까요?
데이터바인딩 관련해서 예제를 유튜브에 올려놓은게 있는데 한번 참고해보시겠어요?
https://www.youtube.com/watch?v=UvA_UHbXWvY&t=10s
주사위앱 소개 및 레이아웃 설정 문제
0
81
2
안드로이드 에뮬레이터가 실행이 안 되요...ㅠ
0
141
2
30 강 소스 좀 올려 주십시요
0
97
2
onBackPressed 함수가 동영상 하고 다르게 동작합니다.
0
108
2
ListView 초기 실행 안됩니다.
0
110
2
코딩을 완료하고난후 앱 실행시 자동 종료
0
87
2
datavinding에서 오류가 납니다.
0
64
1
안드로이드 스튜디오 버전 차이로 초기 empyt activity 선택하면 안됩니다.
0
138
2
context의 구별에 대하여
0
86
2
"프롤로그에서 ..." 오류 관련해 직전 질문에 대한 추가 질문입니다.
0
80
2
"프롤로그에서 콘텐츠가 허용되지 않습니다." 오류
0
187
3
해결완료
1
205
2
databinding 설정후 run하면 에러(해결)
0
234
2
databinding 설정 이후 실행시 에러
0
297
4
안드로이드 입문하는 사람입니다.
0
78
1
Firebase uid
0
90
3
activity_main 화면 다름
0
129
2
강의화면과 다른데 맞게진행되는것인가요...????
0
117
2
파이어베이스 질문
0
84
2
ActivityMainBinding에 오류가 납니다
0
146
2
선생님 onBackPressed 작동이 안되는거 같습니다
0
128
2
>app>res>layout 이 존재하지 않습니다.
0
124
2
안드로이드 스튜디오 미어캣 버전 사용 한글 깨짐
0
784
2
안드로이드 스튜디오 오류 발생 시 대처 방법은 요?
0
310
2





