[英]Why data not pass from xml to Activity?
In my android app:在我的安卓应用中:
dataBinding {
enabled = true
}
in my activity:在我的活动中:
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")
}
}
}
here my model:这是我的模型:
class Wallet() : Serializable {
var email: String? = null
var password: String? = null
override fun toString(): String {
return "\nWallet(email = $email, password = $password)"
}
}
in xml:在 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>
I input some email in editTextEmail and click button.我在editTextEmail中输入了一些电子邮件,然后单击按钮。 As result call method:
结果调用方法:
viewBinding.buttonRegistration.setOnClickListener
Nice.好的。
But here log:但这里记录:
click_button, wallet = Wallet(email = null, password = null)
As you can see the email is null如您所见,电子邮件为空
But I need pass email from xml to activity.但我需要将电子邮件从 xml 传递到活动。 I use viewbinding.
我使用视图绑定。 Why email not pass to activity via this:
为什么电子邮件不通过此传递给活动:
android:text="@{model.email}"
? ?
You have to use two way binding to back data from View
to ViewModel
.您必须使用两种方式绑定将数据从
View
返回到ViewModel
。 Use @= to enable two way data binding in your xml
like:使用@=在您的
xml
中启用两种方式的数据绑定,例如:
android:text="@={model.email}"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.