Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Gửi dữ liệu về Main Activity trong Android bằng Kotlin

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.