Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

วิธีส่ง String จาก Activity หนึ่งไปอีก Activity ใน Android

การส่งข้อมูล (String) ระหว่าง Activity ด้วย Intent Extras

ตัวอย่างนี้แสดงวิธีส่งข้อความจาก MainActivity ไป SecondActivity ผ่าน Intent.putExtra() และรับด้วย getIntent().getStringExtra()

ขั้นตอนที่ 1: สร้างโปรเจกต์ใหม่

Android Studio → File → New Project → กรอกรายละเอียด → Finish

ขั้นตอนที่ 2: Layout หลัก - 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:id="@+id/newActbutton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="เปลี่ยน Activity"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />
    <EditText
        android:id="@+id/etMessage"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@id/newActbutton"
        android:layout_alignParentStart="true"
        android:layout_alignParentEnd="true" />
</RelativeLayout>

ขั้นตอนที่ 3: MainActivity.java

package app.com.sample;

import android.content.Intent;
import androidx.appcompat.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 -> {
            String message = messageEditText.getText().toString();
            Intent intent = new Intent(MainActivity.this, SecondActivity.class);
            intent.putExtra("message_key", message);
            startActivity(intent);
        });
    }
}

ขั้นตอนที่ 4: Layout Activity ที่สอง - 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:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Activity ใหม่"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="151dp" />
    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="ข้อความที่รับมา"
        android:textSize="25dp"
        android:layout_below="@id/textView"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="100dp" />
</RelativeLayout>

ขั้นตอนที่ 5: SecondActivity.java

package app.com.sample;

import androidx.appcompat.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);
    }
}

ขั้นตอนที่ 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 android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

ประเภทข้อมูลที่ส่งได้ผ่าน Intent.putExtra()

Methodประเภทข้อมูลMethod รับค่า
putExtra(key, value)StringgetStringExtra(key)
putExtra(key, value)intgetIntExtra(key, defaultValue)
putExtra(key, value)booleangetBooleanExtra(key, defaultValue)
putExtra(key, value)longgetLongExtra(key, defaultValue)
putExtra(key, value)floatgetFloatExtra(key, defaultValue)
putExtra(key, value)doublegetDoubleExtra(key, defaultValue)
putExtra(key, value)ParcelablegetParcelableExtra(key)
putExtra(key, value)SerializablegetSerializableExtra(key)
putExtra(key, value[])Array (String[], int[], etc.)getStringArrayExtra(key), getIntArrayExtra(key)
putParcelableArrayListExtra()ArrayList<Parcelable>getParcelableArrayListExtra(key)

ใช้ Bundle สำหรับข้อมูลเยอะ

// ส่ง
Bundle bundle = new Bundle();
bundle.putString("name", "John");
bundle.putInt("age", 25);
bundle.putBoolean("active", true);
intent.putExtras(bundle);

// รับ
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
    String name = bundle.getString("name");
    int age = bundle.getInt("age");
}

⚠️ ข้อควรระวัง

  • Key ต้องตรงกันทุกตัว (Case-sensitive) ใช้ Constant string แทน Hardcode
  • getStringExtra() คืนค่า null หากไม่มี key นั้น → ควรเช็ค null
  • ข้อมูลใหญ่ (Bitmap, List ใหญ่) ไม่ควรส่งผ่าน Intent (มีขนาดจำกัด ~1MB) ใช้ ViewModel/SharedViewModel หรือ Database แทน
  • Parcelable เร็วกว่า Serializable มาก

การทดสอบ

รันแอป → พิมพ์ข้อความใน EditText → กด "เปลี่ยน Activity" → Activity ใหม่แสดงข้อความที่พิมพ์