在Android Studio Koala中用Kotlin进行开发。实现如下功能:在SecondActivity中,用户在textView中输入数据data,用户通过返回按钮或按下Back键回到FirstActivity的同时,要把SecondActivity的数据data传回给FirstActivity。 请采用当前主流的方法进行实现,不要使用已过时的函数。
在Android开发中,使用ActivityResultContracts
和ActivityResultLauncher
是当前主流的方法来处理Activity之间的数据传递。以下是如何在Android Studio Koala中使用Kotlin实现这个功能:
ActivityResultLauncher
来启动SecondActivity并接收结果。import android.content.Intent
import android.os.Bundle
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
import android.widget.TextView
class FirstActivity : AppCompatActivity() {
private lateinit var resultLauncher: ActivityResultLauncher<Intent>
private lateinit var textView: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_first)
textView = findViewById(R.id.textView)
// Initialize the ActivityResultLauncher
resultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == RESULT_OK) {
val data = result.data?.getStringExtra("data")
textView.text = data
}
}
// Start SecondActivity when needed
findViewById<Button>(R.id.button).setOnClickListener {
val intent = Intent(this, SecondActivity::class.java)
resultLauncher.launch(intent)
}
}
}
import android.app.Activity
import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import android.widget.Button
import android.widget.EditText
class SecondActivity : AppCompatActivity() {
private lateinit var editText: EditText
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
editText = findViewById(R.id.editText)
// Set result and finish when the button is clicked
findViewById<Button>(R.id.button).setOnClickListener {
val data = editText.text.toString()
val resultIntent = Intent().apply {
putExtra("data", data)
}
setResult(Activity.RESULT_OK, resultIntent)
finish()
}
}
override fun onBackPressed() {
val data = editText.text.toString()
val resultIntent = Intent().apply {
putExtra("data", data)
}
setResult(Activity.RESULT_OK, resultIntent)
super.onBackPressed()
}
}
res/layout/activity_first.xml
中定义FirstActivity的布局。<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="First Activity"
android:textSize="18sp" />
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Go to Second Activity" />
</LinearLayout>
res/layout/activity_second.xml
中定义SecondActivity的布局。<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter data here" />
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Return Data" />
</LinearLayout>
通过使用ActivityResultContracts.StartActivityForResult
和ActivityResultLauncher
,我们可以轻松地在Activity之间传递数据,并且这种方法是当前主流且推荐的方式。这样可以确保代码的可维护性和兼容性。