【问题标题】:How to change the text on the second activity on button clicked from first activity? [KOTLIN]如何更改从第一个活动单击的按钮上的第二个活动的文本? [科特林]
【发布时间】:2021-10-31 14:00:17
【问题描述】:

我必须在我的应用程序上实现 OTP 验证,我只想从上一个活动中获取手机号码,并在我单击从活动 1 到活动的下一个按钮意图后将其设置为下一个活动的文本视图2.

这是它在视图中的样子:

我想把手机号码放在下面请输入发送到的otp..

第一次尝试:我调用了 ObjectSingleton.mobileNum,因为它带有移动电话#,然后我使用了 mobileNum.setText(ObjectSingleton.mobileNum),但它可以正常工作。

我在第一个 Activity 中的代码正打算转到下一个 Activity;

class MobileNumberActivity : AppCompatActivity(), OtpInterface.MobileNumberViews {
lateinit var presenterMobileNumber:MobileNumberPresenter

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_mobile_number)
    presenterMobileNumber = MobileNumberPresenter()
    presenterMobileNumber.mobileViews = this
    close_icon2.setOnClickListener {
        finish()
    }
    nxtBtn.setOnClickListener {
        if (inputText.text.isNullOrEmpty()) {
            inputText.error = "Please enter valid mobile number."
        } else if (inputText.text.toString().length != 10) {
            inputText.error = "Please enter valid mobile number."
        } else{
            val mobile = inputText.text.toString()
            presenterMobileNumber.otpMobile(mobile)
        }
    }
}
override fun ifFailed(msg: String) {
    errorMsg.setText(msg)
}
override fun ifSuccess(res: OtpData) {
    errorMsg.setText("Sent!")
    var intent = Intent(this, OtpValidationActivity::class.java)
    startActivity(intent)
}

这是我要更改手机号码显示文本的第二次活动的代码

class OtpValidationActivity : AppCompatActivity(), OtpValidateInterface.OtpValidateViews {
lateinit var otpPresenter: OtpPresenter
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_otp_verification)

    otpPresenter = OtpPresenter()
   otpPresenter.otpValidationViews = this

    verifyOtpBtn.setOnClickListener {
        if (otp_input.text.isNullOrEmpty()) {
            otp_input.error = "Please enter OTP."
        } else{


            val otpNumber = otp_input.text.toString()
            otpPresenter.otpValidate(ObjectSingleton.mobileNum,otpNumber)
        }
    }
}

override fun validateFailed(res: String) {
    resend.setText("Failed")
}

override fun validateSuccess(msg: OtpValidationData) {
    resend.setText("Success")



}

这里是上述图片的 XML 文件供您参考,我应该把手机号码放在哪里。

    <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/rectangle"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <LinearLayout
        android:id="@+id/linearLayout6"
        android:layout_width="372dp"
        android:layout_height="wrap_content"
        android:background="@drawable/otpbg"
        android:orientation="vertical"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.487"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.041">

        <LinearLayout
            android:id="@+id/linearLayout5"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:orientation="vertical"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
              android:layout_marginTop="@dimen/_30sdp"
                android:text="OTP VERIFICATION"
                android:textColor="@color/reply_black_800"
                android:textSize="@dimen/_22sdp"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.498"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent">

            </TextView>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Please enter the OTP that has sent to">

            </TextView>

            <TextView
                android:id="@+id/mobileNum"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/_22sdp"
                android:layout_marginBottom="@dimen/_30sdp"
                android:text="@string/_63"
                android:textColor="@color/colorPrimary"
                android:textSize="@dimen/_19sdp"
                android:textStyle="bold">


            </TextView>


        </LinearLayout>

        <com.mukesh.OtpView
            android:id="@+id/otp_input"
            android:layout_width="267dp"
            android:layout_height="48dp"
            android:layout_gravity="center"
            android:layout_marginLeft="@dimen/_10sdp"
            android:layout_marginRight="@dimen/_10sdp"
            android:inputType="number"
            android:textAppearance="?attr/textAppearanceHeadline5"
            android:textColor="@android:color/black"
            app:OtpItemCount="6"
            app:OtpItemWidth="@dimen/_30sdp"
            app:OtpLineColor="@color/reply_black_800"
            app:OtpViewType="line" />

        <TextView
            android:id="@+id/resend"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/_19sdp"
            android:gravity="center"
            android:textSize="@dimen/_14sdp"
            android:text="@string/didn_t_recieve_the_code_resend_code"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/otp_view"
            app:layout_constraintVertical_bias="0.039"
            android:paddingBottom="@dimen/_30sdp"/>

    </LinearLayout>

    <androidx.appcompat.widget.AppCompatButton
        android:id="@+id/verifyOtpBtn"
        android:layout_width="378dp"
        android:layout_height="42dp"
        android:background="@drawable/radius_btn"
        android:backgroundTint="@color/colorPrimary"
        android:text="Next"
        android:textAllCaps="false"
        android:textColor="@color/white"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.484"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/linearLayout6"
        app:layout_constraintVertical_bias="0.117" />

</androidx.constraintlayout.widget.ConstraintLayout>

我是 Kotlin/Android 开发的新手,希望有人能帮助我。 #JUniorDEV

更新:请分享我的 MobileNumberPresenter 代码:

    var mobileViews:OtpInterface.MobileNumberViews? = null
    override fun otpMobile(mobile: String) {
        Fuel.post("https://api.staging.riderko.com/riderko_be/public/api/riderSendRegisterOtp", listOf(
            "mobile" to mobile
        )).timeout(5000)
            .header("Accept", "application/json")
            .responseObject<OtpResponse>{request, response, result ->
                when (result) {
                    is Result.Failure -> {
                        mobileViews?.ifFailed(result.error.response.statusCode.toString())
                    }
                    is Result.Success -> {
                        val (bytes, error) = result
                        if (bytes != null) {
                            val status = bytes.success
                            if (status){
                                mobileViews?.ifSuccess(bytes.data)
                            }else{
                                mobileViews?.ifFailed(bytes.message)
                            }
                        }
                    }

                }
            }
    }

【问题讨论】:

    标签: android kotlin android-layout android-activity


    【解决方案1】:

    OtpInterface.MobileNumberViews 中 将第二个参数作为字符串添加到 ifSuccess

    MobileNumberPresenter

    mobileViews?.ifSuccess(bytes.data) 更改为 mobileViews?.ifSuccess(bytes.data, mobile)

    你的ifSuccess方法会改成

    override fun ifSuccess(res: OtpData, mobileNum: String) {
        errorMsg.setText("Sent!")
        var intent = Intent(this, OtpValidationActivity::class.java)
        intent.putExtra("MOBILE_NUMBER",mobileNum)
        startActivity(intent)
    }

    而在 OtpValidationActivity

    val mobileNum = arguments?.getString("MOBILE_NUMBER")

    【讨论】:

      【解决方案2】:

      将第一个活动的代码更新为

          override fun ifSuccess(res: OtpData) {
          errorMsg.setText("Sent!")
          var intent = Intent(this, OtpValidationActivity::class.java)
          startActivity(intent)
          intent.putExtra("MobileNum",mobile)
      }
      

      现在在 setContentView(R.layout.activity_otp_verification) 之后的第二个活动中 添加这一行:

      val MobNo = intent.getExtra("MobileNum")
      mobileNum.text = MobNo
      

      希望这会奏效

      【讨论】:

        【解决方案3】:

        这里在MobileNumberActivity里面ifSuccess()之前做startActivity(intent)intent.putExtra("IDENTIFER",mobileNum)

        现在在第二个活动中,只需执行val mobNO = intent.getStringExtra("IDENTIFER")

        现在将 mobNo 分配给所需的 textView。

        这有助于在活动之间传递数据。

        【讨论】:

        • 在第二个活动的 onCreate 中执行 val mobNO = intent.getExtra("IDENTIFER") 时出现错误。它似乎不知道谁的意图。
        • 对不起getStringExtra
        【解决方案4】:

        我可以通过调用分配给变量的ObjectSingleton.mobNum 并将其显示到视图中来解决这个问题当您关闭应用时,此值将自动删除。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-05-26
          • 2015-09-30
          • 1970-01-01
          • 1970-01-01
          • 2023-04-02
          • 1970-01-01
          • 2016-03-21
          • 1970-01-01
          相关资源
          最近更新 更多