[英]Why data not pass from xml to Activity?
在我的安卓應用中:
dataBinding {
enabled = true
}
在我的活動中:
class RegistrationActivity : RootActivity() {
private lateinit var viewBinding: RegistrationActivityBinding // use "registration_activity.xml"
private lateinit var registrationViewModel: RegistrationViewModel
private var wallet = Wallet()
companion object {
private val TAG = RegistrationActivity::class.java.name
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Debug.d(TAG, "onCreate: savedInstanceState = $savedInstanceState")
viewBinding = RegistrationActivityBinding.inflate(layoutInflater)
setContentView(viewBinding.root)
viewBinding.setVariable(BR.model, wallet)
viewBinding.executePendingBindings()
init()
}
private fun init() {
viewBinding.buttonRegistration.setOnClickListener {
Debug.d(TAG, "initLogic: click_button, wallet = $wallet")
}
}
}
這是我的模型:
class Wallet() : Serializable {
var email: String? = null
var password: String? = null
override fun toString(): String {
return "\nWallet(email = $email, password = $password)"
}
}
在 XML 中:
<data>
<variable
name="model"
type="com.myproject.model.Wallet" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/common_color_bg">
<include
android:id="@+id/registrationToolbar"
layout="@layout/tool_bar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:title="@{@string/registration}" />
<EditText
android:id="@+id/editTextEmail"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="@dimen/default_margin"
android:hint="@string/email"
android:importantForAutofill="no"
android:inputType="textEmailAddress"
android:text="@{model.email}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/registrationToolbar" />
<EditText
android:id="@+id/editTextPassword"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/default_margin"
android:hint="@string/password"
android:importantForAutofill="no"
android:inputType="textPassword"
android:text="@{model.password}"
app:layout_constraintEnd_toEndOf="@+id/editTextEmail"
app:layout_constraintStart_toStartOf="@+id/editTextEmail"
app:layout_constraintTop_toBottomOf="@+id/editTextEmail" />
<EditText
android:id="@+id/editTextPasswordRetype"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/default_margin"
android:hint="@string/retypePassword"
android:importantForAutofill="no"
android:inputType="textPassword"
app:layout_constraintEnd_toEndOf="@+id/editTextEmail"
app:layout_constraintStart_toStartOf="@+id/editTextEmail"
app:layout_constraintTop_toBottomOf="@+id/editTextPassword" />
<com.google.android.material.button.MaterialButton
android:id="@+id/buttonRegistration"
android:layout_width="0dp"
android:layout_height="@dimen/button_height"
android:layout_margin="@dimen/default_margin"
android:layout_marginBottom="@dimen/default_margin"
android:text="@string/registration"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editTextPasswordRetype" />
<include
android:id="@+id/progressBarLayout"
layout="@layout/progress_bar_layout"
android:visibility="gone" />
</androidx.constraintlayout.widget.ConstraintLayout>
我在editTextEmail中輸入了一些電子郵件,然后單擊按鈕。 結果調用方法:
viewBinding.buttonRegistration.setOnClickListener
好的。
但這里記錄:
click_button, wallet = Wallet(email = null, password = null)
如您所見,電子郵件為空
但我需要將電子郵件從 xml 傳遞到活動。 我使用視圖綁定。 為什么電子郵件不通過此傳遞給活動:
android:text="@{model.email}"
?
您必須使用兩種方式綁定將數據從View
返回到ViewModel
。 使用@=在您的xml
中啟用兩種方式的數據綁定,例如:
android:text="@={model.email}"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.