簡體   English   中英

為什么數據不從 xml 傳遞到 Activity?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM