当其他编辑文本聚焦时如何计算编辑文本的值?

时间:2021-02-05 20:55:44

标签: android kotlin focus

当某些编辑文本具有焦点时,我正在尝试进行一些数学运算。我有 3 个编辑文本,根据哪个重点关注数学运算,其他两个编辑文本值也是如此。我在 Java 中有类似的东西,它工作正常,但在 Kotlin 上它没有输入任何所需的功能。

override fun onClick(v: View?) {
    if (edtProductSuggestedPrice.hasFocus() ) {
        calculateWitIVA(1)
    }
    if(edtProductSuggestedPriceWithIva.hasFocus()){
        calculateWitIVA(2)
    }
}

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

我相信您需要使用 MutableLiveData<String> 并且推荐使用双向数据绑定

例如

我的视图模型

import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import com.yazan.talabatclonedriver.Repository
import com.yazan.talabatclonedriver.db.UserEntity

class UserViewModel(private val repository: Repository) : ViewModel() {
    val userName: MutableLiveData<String> = MutableLiveData("N/A")
    val phoneNum: MutableLiveData<String> = MutableLiveData("404")
    val driverPass: MutableLiveData<String> = MutableLiveData("")
}

和我的布局

    <?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.yazan.talabatclonedriver.viewModel.UserViewModel" />
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/orange"
        tools:context=".ui.frags.SignInFrag">

        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="32dp"
            android:layout_marginTop="30dp"
            android:text="Welcome to \nTalabat Driver"
            android:textColor="#FFF"
            android:textSize="34sp"
            android:textStyle="bold"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <ImageView
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_marginStart="32dp"
            android:layout_marginEnd="32dp"
            android:src="@drawable/scooter_delivery_pic"
            app:layout_constraintBottom_toTopOf="@+id/cv_login_container"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/textView"
            tools:ignore="ContentDescription" />

        <androidx.cardview.widget.CardView
            android:id="@+id/cv_login_container"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="32dp"
            android:layout_marginEnd="32dp"
            android:layout_marginBottom="32dp"
            app:cardElevation="20dp"
            app:layout_constraintBottom_toTopOf="@+id/tv_navigate_text"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"
                android:padding="15dp">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dp"
                    android:layout_marginBottom="15dp"
                    android:text="Log into your driver account"
                    android:textColor="#000"
                    android:textSize="22sp"
                    android:textStyle="bold" />

                <EditText
                    android:id="@+id/et_userName"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_marginBottom="15dp"
                    android:ems="5"
                    android:text="@={viewModel.userName}"
                    android:hint="Enter username"
                    android:textSize="20sp" />

                <EditText
                    android:id="@+id/et_userPass"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_marginBottom="15dp"
                    android:ems="5"
                    android:text="@={viewModel.driverPass}"
                    android:hint="Enter password"
                    android:textSize="20sp" />

                <Button
                    android:id="@+id/bt_signIn"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:backgroundTint="@color/orange"
                    android:padding="10dp"
                    android:text="Continue"
                    android:textAllCaps="false"
                    android:textSize="18sp" />

            </LinearLayout>

        </androidx.cardview.widget.CardView>


        <TextView
            android:id="@+id/tv_navigate_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{viewModel.driverPass}"
            android:textColor="#FFF"
            android:textSize="20sp"
            android:textStyle="bold"
            android:layout_marginBottom="20dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent" />

    </androidx.constraintlayout.widget.ConstraintLayout>

</layout>

当您更改 et_userName 编辑文本时,tv_navigate_text 应同时更改

别忘了添加

  BuildFeatures{
dataBinding = true
}

到你的级别应用 Gradle