如何更改从第一个 activity 单击的按钮上的第二个 activity 上的文本? [科特林]
How to change the text on the second activity on button clicked from first activity? [KOTLIN]
我必须在我的应用程序上实施 OTP 验证,我只想从上一个 activity 获取手机号码并在下一个 activity 将其设置为文本视图一旦我单击了从 Activity 1 到 Activity 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)
}
这是第二个Acitivy的代码,我想在其中更改手机号码显示的文本
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
更新:Imma 与您分享我的 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)
}
}
}
}
}
}
这里在MobileNumberActivity里面ifSuccess()
之前做startActivity(intent)
做intent.putExtra("IDENTIFER",mobileNum)
现在在第 2 个 activity 中只需执行 val mobNO = intent.getStringExtra("IDENTIFER")
现在将 mobNo 分配给所需的 textView。
这有助于在活动之间传递数据。
在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")
将第一个activity的代码更新为
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) 之后的第二个 activity
添加此行:
val MobNo = intent.getExtra("MobileNum")
mobileNum.text = MobNo
希望这会奏效
我可以简单地通过调用 ObjectSingleton.mobNum
分配给一个变量并将其显示在视图中来解决这个问题我刚刚了解到一旦 objectsingleton
被分配给,该值将被转移到您应用的任何部分,当您关闭应用时,此值将自动删除。
我必须在我的应用程序上实施 OTP 验证,我只想从上一个 activity 获取手机号码并在下一个 activity 将其设置为文本视图一旦我单击了从 Activity 1 到 Activity 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)
}
这是第二个Acitivy的代码,我想在其中更改手机号码显示的文本
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
更新:Imma 与您分享我的 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)
}
}
}
}
}
}
这里在MobileNumberActivity里面ifSuccess()
之前做startActivity(intent)
做intent.putExtra("IDENTIFER",mobileNum)
现在在第 2 个 activity 中只需执行 val mobNO = intent.getStringExtra("IDENTIFER")
现在将 mobNo 分配给所需的 textView。
这有助于在活动之间传递数据。
在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")
将第一个activity的代码更新为
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) 之后的第二个 activity 添加此行:
val MobNo = intent.getExtra("MobileNum")
mobileNum.text = MobNo
希望这会奏效
我可以简单地通过调用 ObjectSingleton.mobNum
分配给一个变量并将其显示在视图中来解决这个问题我刚刚了解到一旦 objectsingleton
被分配给,该值将被转移到您应用的任何部分,当您关闭应用时,此值将自动删除。