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

Truyền nhiều dữ liệu giữa hai Activity Android bằng Bundle

Cách đơn giản nhất để truyền nhiều giá trị riêng lẻ (String, int, boolean...) từ Activity này sang Activity khác là sử dụng Bundle kèm theo Intent.putExtras().

Các bước thực hiện

Bước 1: Tạo dự án mới

Tạo dự án Android Studio với package com.example.myapplication.

Bước 2: Giao diện màn hình chính (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:layout_margin="16dp"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/etName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:hint="Tên"
        android:inputType="text" />

    <EditText
        android:id="@+id/etAge"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:hint="Tuổi"
        android:inputType="number" />

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="16dp"
        android:text="Tiếp theo" />
</LinearLayout>

Bước 3: Gửi dữ liệu (src/MainActivity.java)

package com.example.myapplication;

import android.content.Intent;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {
    private EditText etName, etAge;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        etName = findViewById(R.id.etName);
        etAge = findViewById(R.id.etAge);
        Button button = findViewById(R.id.button);

        button.setOnClickListener(v -> {
            String name = etName.getText().toString().trim();
            String age = etAge.getText().toString().trim();

            Bundle bundle = new Bundle();
            bundle.putString("name", name);
            bundle.putString("age", age);
            // Có thể thêm nhiều kiểu khác: putInt, putBoolean, putParcelable...

            Intent intent = new Intent(MainActivity.this, SecondActivity.class);
            intent.putExtras(bundle);
            startActivity(intent);
        });
    }
}

Bước 4: Giao diện màn hình nhận (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:layout_margin="16dp"
    android:orientation="vertical"
    tools:context=".SecondActivity">

    <TextView
        android:id="@+id/tvName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/tvAge"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

Bước 5: Nhận dữ liệu (src/SecondActivity.java)

package com.example.myapplication;

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import android.widget.TextView;

public class SecondActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        Bundle bundle = getIntent().getExtras();
        if (bundle != null) {
            String name = bundle.getString("name");
            String age = bundle.getString("age");

            TextView tvName = findViewById(R.id.tvName);
            TextView tvAge = findViewById(R.id.tvAge);
            tvName.setText("Tên: " + name);
            tvAge.setText("Tuổi: " + age);
        }
    }
}

Bước 6: AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.example.myapplication">

    <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>

Mở rộng: Các phương thức Bundle thường dùng

Phương thứcMô tả
putString(key, value)Lưu chuỗi
putInt(key, value)Lưu số nguyên
putBoolean(key, value)Lưu giá trị logic
putDouble(key, value)Lưu số thực
putParcelable(key, value)Lưu đối tượng Parcelable
putSerializable(key, value)Lưu đối tượng Serializable
putStringArray(key, value)Lưu mảng chuỗi

Tương ứng mỗi putX có getX để lấy dữ liệu ngược lại.