databinding
을 공부함으로써 운동을 시작하는 간단한 활동을 만들었습니다. 그리고이 다음과 같은 코드 :텍스트의 활동이 변경되지 않는 이유는 무엇입니까?
MainActivity : 클릭에 대한
class MainActivity : AppCompatActivity() {
val users = UserProfile("First Name","Last Name","Off",false)
val handlerbtn = HandlerButtonClick()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding: ActivityMainBinding = DataBindingUtil.setContentView(this,R.layout.activity_main)
binding.user = users
binding.handler = handlerbtn
}
}
등급 :
class HandlerButtonClick {
fun onClickButton(view: View, user: UserProfile) {
var msg = ""
if(!user.isOnline){
msg = "Online"
user.firstName = "Henrique"
user.lastName = "Mendes"
user.status = "Online"
user.isOnline = true
}else{
msg = "Offline"
user.firstName = "First Name"
user.lastName = "Last Name"
user.status = "Offline"
user.isOnline = false
}
Toast.makeText(view.context, msg, Toast.LENGTH_SHORT).show()
}
}
USERPROFILE 등급 :
class UserProfile {
var firstName: String = ""
var lastName: String = ""
var status: String = ""
var isOnline: Boolean = false
constructor(firstNames: String, lastNames: String, statuss: String, isOnlines: Boolean) {
this.firstName = firstNames
this.lastName = lastNames
this.status = statuss
this.isOnline = isOnlines
}
}
XML :
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="user"
type="com.dev.bob.testdatabinding2.UserProfile" />
<variable
name="handler"
type="com.dev.bob.testdatabinding2.HandlerButtonClick" />
</data>
<LinearLayout 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"
android:orientation="vertical"
tools:context="com.dev.bob.testdatabinding2.MainActivity">
<View
android:layout_width="match_parent"
android:layout_height="1.0dp"
android:layout_marginBottom="10dp"
android:layout_marginTop="10dp"
android:background="@{[email protected]/colorGreen : @color/colorAccent}" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:text="@{user.firstName}" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:text="@{user.lastName}" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:text="@{user.status}" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="@{(view)-> handler.onClickButton(view, user)}"/>
</LinearLayout>
</layout>
토스트는, 즉, 변수 msg
변화를 잘 작동합니다. 그러나 화면의 텍스트는 바뀌지 않습니다. 각 조건에 따라 변경되도록하려면 어떻게해야합니까 (If
/else
)?
내가 무슨 말을, 버튼을 클릭하여, firstName
헨리 또는 (다시) 이름
MainActivity에서'user' 변수와 일치하는지 확인하기 위해'user' 값을 검사하기 위해 디버깅을 시도 했습니까? – nhoxbypass
변수는 XML에서 명시적인 변수이므로 동일합니다. 하지만 내가 어떻게 알 수 있니? Handler 클래스에서 값이 변경되었습니다. –