我有一個問題,我不知道如何為 TextView 使用 DataBinding。我為 Glide 做了一個 DataBinding 并且它成功了,但是對于 TextView 我不知道該怎么做
這是代碼
viewModel2.shouldShowImageProfile.observe(this) {
Glide.with(binding.root)
.load(it)
.circleCrop()
.into(binding.rivProfile)
}
viewModel2.shouldShowUsername.observe(this){
TextView.with(binding.root) <- the TextView
.load(it)
.into(binding.tvHello)
}
uj5u.com熱心網友回復:
我寫了一個關于 的假設的答案shouldShowUsername,但因為這是你的String價值,你可以做這樣的事情:
viewModel2.shouldShowUsername.observe(this) { shouldShowUsername ->
binding.tvHello.isVisible = !shouldShowUsername.isNullOrEmpty()
binding.tvHello.text = shouldShowUsername
}
這將導致您僅在具有適當值TextView時才顯示,然后取該值并將其分配給. 如果您希望始終顯示,您可以跳過塊中的第一行。shouldShowUsernameTextViewTextView
uj5u.com熱心網友回復:
如果您不想對 viewmodel 的變數使用觀察方法,您可以使用資料系結并直接從 xml 更改 textview 的值,這樣您就不必手動撰寫binding.tvUserName.text = it.value。下面的代碼顯示了使用 xml 和 viewmodel 進行資料系結的示例。
XML:
<?xml version="1.0" encoding="utf-8"?>
<layout 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">
<data>
<variable
name="viewModel"
type="com.example.kotlinbasics.android_architecture.mvvm_architecture.ChatViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/holo_red_light"
tools:context=".android_architecture.mvvm_architecture.UserOneFragment">
<androidx.appcompat.widget.AppCompatEditText
android:id="@ id/etMessageToSecond"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/_10sdp"
android:background="@drawable/text_field_background"
android:gravity="center"
android:hint="@string/enter_message"
android:padding="@dimen/_7sdp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_percent="0.7" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@ id/tvCurrentMessage"
android:text="@{`Current Message: ` viewModel.latestMessageFromFirst}"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_50sdp"
android:padding="@dimen/_10sdp"
android:textColor="@color/white"
android:textSize="@dimen/_20ssp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/etMessageToSecond" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
在上面的示例中,我在 textview 中列印用戶在 edittext 欄位中寫入的實時文本。每當用戶在 edittext 中寫入時,它的值都會在 viewmodel 中更新,而 textview 在運行時訪問該值。
對于影像的事情,您可以這樣做,您可以創建自定義系結配接器來更新影像。例子:
<androidx.appcompat.widget.AppCompatImageView
android:id="@ id/ivEmailVerification"
loadImageFromUrl="@{viewModel.emailVerifyImageUrl}"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvIsEmailValid"
app:layout_constraintWidth_percent="0.7" />
在 BindingAdpater 上
@BindingAdapter("loadImageFromUrl")
fun ImageView.loadImageFromUrl(imageUrl: String) {
Picasso.get().load(imageUrl).into(this)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/463594.html
上一篇:KotlinSpringBootGradle-創建名稱為“resourceHandlerMapping”的bean時出錯-未設定ServletContext
