Home > Software engineering >  How to change the text on the second activity on button clicked from first activity? [KOTLIN]
How to change the text on the second activity on button clicked from first activity? [KOTLIN]

Time:09-17

I have to implement OTP validation on my application, I just want to get the mobile number from the previous activity and set it to the textview on the next activity once I clicked the Next Button intent from Activity 1 to Activity 2.

Here is how it looks like in view: enter image description here

I would like to put the mobile number below the please enter the otp that has sent to..

First try: I called the ObjectSingleton.mobileNum since it carries the mobile # then I used mobileNum.setText(ObjectSingleton.mobileNum) but it ddint work.

My codes in 1st Activity where intent is happening to go to the next 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)
}

Here are the codes of the 2nd Acitivy where I want to change the text of mobile number display

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")



}

For your REFERENCE here's the XML file of the said PICTURE above where should I put the Mobile number.

    <?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>

I am new to Kotlin/Android Develepment I hope someone help me with this. #JUniorDEV

UPDATE: Imma share to you my MobileNumberPresenter codes:

    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)
                            }
                        }
                    }

                }
            }
    }

CodePudding user response:

in OtpInterface.MobileNumberViews add second parameter as string to ifSuccess

in MobileNumberPresenter

change mobileViews?.ifSuccess(bytes.data) to mobileViews?.ifSuccess(bytes.data, mobile)

and you ifSuccess method will be changed to

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

And in OtpValidationActivity

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

CodePudding user response:

Update the code of 1st activity to

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

Now in the second activity after setContentView(R.layout.activity_otp_verification) add this line:

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

Hope this will work

CodePudding user response:

Here in the MobileNumberActivity inside the ifSuccess() before you do startActivity(intent) do intent.putExtra("IDENTIFER",mobileNum)

Now in the 2nd activity simply do val mobNO = intent.getStringExtra("IDENTIFER")

and now assign the mobNo to the desired textView.

This helps pass data between activities.

CodePudding user response:

I was able to solve this simply by calling ObjectSingleton.mobNum assigned to a variable and displayed it into view I just learnt that once objectsingleton has been assigned to, the value will be carried over to any part of your app, this value will be removed automatically when you close your app.

  • Related