Giới thiệu
Ví dụ này minh họa cách truyền dữ liệu từ Activity thứ hai (SecondActivity) về MainActivity sử dụng startActivityForResult và onActivityResult trong Android Kotlin.
Các bước thực hiện
Bước 1: Tạo dự án mới
Mở Android Studio, chọn File → New Project, điền thông tin.
Bước 2: Giao diện MainActivity (res/layout/activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="100dp"
android:layout_marginBottom="50dp"
android:text="Tutorials Point"
android:textAlignment="center"
android:textColor="@android:color/holo_green_dark"
android:textSize="32sp"
android:textStyle="bold" />
<TextView
android:id="@+id/textViewResult"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Result: "
android:textColor="@android:color/black"
android:textSize="24sp"
android:textStyle="bold" />
<EditText
android:id="@+id/editTextNumber1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Number 1"
android:inputType="number" />
<EditText
android:id="@+id/editTextNumber2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Number 2"
android:inputType="number" />
<Button
android:id="@+id/btnOpenActivity2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="Open Second Activity" />
</LinearLayout>
Bước 3: MainActivity.kt
import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
private lateinit var textViewResult: TextView
private lateinit var editTextNumber1: EditText
private lateinit var editTextNumber2: EditText
private lateinit var button: Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
title = "KotlinApp"
textViewResult = findViewById(R.id.textViewResult)
editTextNumber1 = findViewById(R.id.editTextNumber1)
editTextNumber2 = findViewById(R.id.editTextNumber2)
button = findViewById(R.id.btnOpenActivity2)
button.setOnClickListener {
val num1Str = editTextNumber1.text.toString()
val num2Str = editTextNumber2.text.toString()
if (num1Str.isEmpty() || num2Str.isEmpty()) {
Toast.makeText(this, "Please insert numbers", Toast.LENGTH_SHORT).show()
} else {
val number1 = num1Str.toInt()
val number2 = num2Str.toInt()
val intent = Intent(this, SecondActivity::class.java).apply {
putExtra("number1", number1)
putExtra("number2", number2)
}
startActivityForResult(intent, 1)
}
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == 1) {
when (resultCode) {
Activity.RESULT_OK -> {
val result = data?.getIntExtra("result", 0) ?: 0
textViewResult.text = "Result: $result"
}
Activity.RESULT_CANCELED -> {
textViewResult.text = "Nothing selected"
}
}
}
}
}
Bước 4: Tạo SecondActivity
res/layout/activity_second.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
tools:context=".SecondActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="100dp"
android:layout_marginBottom="50dp"
android:text="Tutorials Point"
android:textAlignment="center"
android:textColor="@android:color/holo_green_dark"
android:textSize="32sp"
android:textStyle="bold" />
<TextView
android:id="@+id/textViewNumbers"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Numbers: "
android:textColor="@android:color/black"
android:textSize="24sp"
android:textStyle="bold" />
<Button
android:id="@+id/buttonAdd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="Add" />
<Button
android:id="@+id/buttonSubtract"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="Subtract" />
</LinearLayout>
SecondActivity.kt
import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
class SecondActivity : AppCompatActivity() {
private lateinit var textViewNumber: TextView
private lateinit var buttonAdd: Button
private lateinit var buttonSubtract: Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
val number1 = intent.getIntExtra("number1", 0)
val number2 = intent.getIntExtra("number2", 0)
textViewNumber = findViewById(R.id.textViewNumbers)
textViewNumber.text = "Numbers: $number1, $number2"
buttonAdd = findViewById(R.id.buttonAdd)
buttonSubtract = findViewById(R.id.buttonSubtract)
buttonAdd.setOnClickListener {
val result = number1 + number2
val resultIntent = Intent().apply { putExtra("result", result) }
setResult(Activity.RESULT_OK, resultIntent)
finish()
}
buttonSubtract.setOnClickListener {
val result = number1 - number2
val resultIntent = Intent().apply { putExtra("result", result) }
setResult(Activity.RESULT_OK, resultIntent)
finish()
}
}
}
Bước 5: AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.example.q11">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SecondActivity" />
</application>
</manifest>
Chạy ứng dụng
Kết nối thiết bị, nhấn Run. Nhập hai số, nhấn "Open Second Activity", chọn Add hoặc Subtract, kết quả sẽ hiện trên MainActivity.
Lưu ý: Từ Android API 30, startActivityForResult đã deprecated, nên dùng ActivityResultContracts (Activity Result API) cho cách hiện đại hơn.