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

Cách truyền String từ Activity này sang Activity khác trong Android?

Giới thiệu

Bài viết minh họa cách truyền dữ liệu (String) giữa hai Activity bằng Intent.putExtra() và getIntent().getStringExtra().

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

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

Khởi tạo project Android Studio.

Bước 2: MainActivity với EditText + Button (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context=".MainActivity">
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Chuyển Activity"
        android:id="@+id/newActbutton"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />
    <EditText
        android:id="@+id/etMessage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/newActbutton"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"/>
</RelativeLayout>

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

package app.com.sample;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {
    Button changeActivityButton;
    EditText messageEditText;

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

        messageEditText = findViewById(R.id.etMessage);
        changeActivityButton = findViewById(R.id.newActbutton);

        changeActivityButton.setOnClickListener(v -> {
            Intent intent = new Intent(MainActivity.this, SecondActivity.class);
            String message = messageEditText.getText().toString();
            intent.putExtra("message_key", message);
            startActivity(intent);
        });
    }
}

Bước 4: Layout SecondActivity (res/layout/activity_second.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context=".SecondActivity">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Activity Mới"
        android:id="@+id/textView"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="151dp" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Nội dung nhận được"
        android:textSize="25dp"
        android:id="@+id/textView2"
        android:layout_below="@+id/textView"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="100dp" />
</RelativeLayout>

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

package app.com.sample;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class SecondActivity extends AppCompatActivity {
    TextView messageTextView;

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

        String message = getIntent().getStringExtra("message_key");
        messageTextView = findViewById(R.id.textView2);
        messageTextView.setText(message);
    }
}

Bước 6: AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.com.sample">
    <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=".SecondActivity"></activity>
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

Chạy ứng dụng

Kết nối thiết bị, nhấn Run. Nhập text → nhấn "Chuyển Activity" → SecondActivity hiển thị text vừa nhập.

Cách truyền String từ Activity này sang Activity khác trong Android?

Cách truyền String từ Activity này sang Activity khác trong Android?

Truyền các kiểu dữ liệu khác

KiểuGửi (putExtra)Nhận (getExtra)
StringputExtra("key", "value")getStringExtra("key")
intputExtra("key", 123)getIntExtra("key", defaultValue)
longputExtra("key", 123L)getLongExtra("key", defaultValue)
floatputExtra("key", 1.5f)getFloatExtra("key", defaultValue)
booleanputExtra("key", true)getBooleanExtra("key", defaultValue)
String[]putExtra("key", new String[]{"a","b"})getStringArrayExtra("key")
ParcelableputExtra("key", parcelableObj)getParcelableExtra("key")
SerializableputExtra("key", serializableObj)getSerializableExtra("key")
BundleputExtras(bundle)getExtras()

Best Practices

  • Dùng static final String KEY = "key" để tránh typo
  • Kiểm tra null: getIntent().hasExtra("key") trước khi get
  • Truyền object lớn: dùng Parcelable (nhanh hơn Serializable)
  • Giữa Fragment: dùng Fragment.setArguments(Bundle) hoặc ViewModel shared
  • Activity Result API (mới): registerForActivityResult cho request/response