嗨,我对android开发(我正在使用Kotlin)非常陌生,而startActivityForResult则反对,试图制作一个简单的应用程序,使其变得简单:
我有一个主活动,有两个按钮,第一个活动和第二个活动。
我有一个带有文本字段和finish按钮的“子”活动。
当我单击main activity按钮时,子活动将打开(它的工作数据也可以是我从main活动传递的访问)。然后,我将一些文本放到文本字段中,当我单击finish按钮时,我希望将文本字段中的数据传输到主活动中,但我无法做到这一点。跟随介质,yt和堆叠溢出无法使它工作。
我的主要活动代码
package com.example.data
import android.app.Activity
import android.app.Instrumentation
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.preference.PreferenceManager
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import android.widget.Toast
import androidx.activity.result.ActivityResult
import androidx.activity.result.ActivityResultCallback
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
class MainActivity : AppCompatActivity() {
companion object{
private const val FIRST_ACTIVITY_RESULT = 1
}
lateinit var activityResultLauncher: ActivityResultLauncher<Intent>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val firstbtn = findViewById<Button>(R.id.first_activity_btn)
val first_text = findViewById<TextView>(R.id.first_activity_text)
val secondbtn = findViewById<Button>(R.id.second_activity_btn)
val edit = findViewById<EditText>(R.id.edit_name)
firstbtn.setOnClickListener{
var intent = Intent(this,first_activity::class.java)
intent.putExtra("data_name",edit.text.toString())
activityResultLauncher.launch(intent)
finish()
}
secondbtn.setOnClickListener{
var intent = Intent(this,second_activity::class.java)
startActivity(intent)
finish()
}
activityResultLauncher = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()){ result:ActivityResult?->
if (result!!.resultCode == Activity.RESULT_OK){
if(result.data!!.extras!!.getString("data_transfer").toString() == "yes"){
Toast.makeText(applicationContext, "user send reply", Toast.LENGTH_SHORT).show()
}else{
Toast.makeText(applicationContext, "sorry user did not send reply", Toast.LENGTH_SHORT).show()
}
}
}
}
}第一活动码
package com.example.data
import android.app.Activity
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
class first_activity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_first)
val finish = findViewById<Button>(R.id.finish_btn)
val textData = findViewById<TextView>(R.id.tv_first_activity)
val edit = findViewById<EditText>(R.id.edit_text_first_activity)
textData.text = intent.extras!!.getString("data_name")
finish.setOnClickListener{
// val intent = Intent(this,MainActivity::class.java)
// intent.putExtra("success","success message woohooo!!!")
// startActivity(intent)
val intent = Intent()
// val intent = Intent(this,MainActivity::class.java)
intent.putExtra("data_transfer",edit.text.toString())
setResult(Activity.RESULT_OK,intent)
// startActivity(intent)
finish()
}
}
}发布于 2022-01-28 12:06:15
您需要的是registerForActivityResult(),这里是一个示例项目,您可以阅读更多关于这个新API的内容。
用例:用户通过输入输入(第二个活动)并单击按钮可以增强MainActivity中的输入文本(第一个活动):
MainActivity类:
import android.app.Activity
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
import androidx.activity.result.contract.ActivityResultContracts
class MainActivity : AppCompatActivity() {
lateinit var txt:TextView
lateinit var btn:Button
private val secondActivityWithResult =
registerForActivityResult(ActivityResultContracts.StartActivityForResult())
{ result ->
if (result.resultCode == Activity.RESULT_OK){
result.data?.getStringExtra("name")?.let { txt.text = it }
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btn = findViewById(R.id.next_activity)
txt = findViewById(R.id.returned_text)
btn.setOnClickListener{
secondActivityWithResult.launch(Intent(this,SecondActivity::class.java))
}
}
}activity_main 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"
tools:context=".MainActivity">
<Button
android:id="@+id/next_activity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:id="@+id/returned_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="your string appear here"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>SecondActivity类:
import android.app.Activity
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
class SecondActivity : AppCompatActivity() {
lateinit var input:EditText
lateinit var btn:Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
btn = findViewById(R.id.return_btn)
input = findViewById(R.id.my_input)
btn.setOnClickListener{
SharedValues.myString = input.text.toString()
val intent = Intent()
intent.putExtra("name","my love is NAHID MORADI")
setResult(Activity.RESULT_OK,intent)
finish()
}
}
}activity_second 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"
tools:context=".SecondActivity">
<EditText
android:id="@+id/my_input"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="88dp"
android:ems="10"
android:hint="type here"
android:inputType="textPersonName"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.497"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/return_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="76dp"
android:text="Return To FirstActivity"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/my_input" />
</androidx.constraintlayout.widget.ConstraintLayout>https://stackoverflow.com/questions/70893021
复制相似问题