android - 为什么数据不能从 xml 传递到 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
to备份数据ViewModel
。使用@=在您的xml
喜欢中启用两种方式的数据绑定:
android:text="@={model.email}"
推荐阅读
- python - 如何调用子类的覆盖方法而不是父类方法?
- angular - Angular mat-badge 不适用于动态数据
- azure-devops - 如果前阶段部署条件在 yaml 中设置为 false,则阻止部署
- google-sheets-api - 如何引入我需要的URI
- java - java.sql.SQLException:服务器时区值 - 使用端口和名称连接
- python - 记录 T-SNE 培训?
- go - 从无格式文本中提取多个值
- excel - 在 Excel 2016 数据透视表中禁用日期分组
- batch-file - 两个连接的代码不会相互关闭
- java - 使用 firebase auth 验证用户