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クラスで変更されました –