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

วิธีสลับระหว่าง Activity ต่างๆ ใน Android ด้วย Kotlin

ภาพรวม

ตัวอย่างนี้สาธิตการนำทาง (Navigation) ระหว่างสอง Activity โดยใช้ Intent แบบ Explicit Intent

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

เปิด Android Studio เลือก File → New Project

ขั้นตอนที่ 2: Layout ของ MainActivity (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"
    android:padding="16dp"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="40dp"
        android:text="MainActivity"
        android:textColor="@android:color/holo_purple"
        android:textSize="24sp"
        android:textStyle="bold" />

    <Button
        android:id="@+id/btnOpenAct2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="Open Second Activity" />

</RelativeLayout>

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

import android.content.Intent
import android.os.Bundle
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        title = "KotlinApp"

        val button = findViewById<Button>(R.id.btnOpenAct2)
        button.setOnClickListener {
            val intent = Intent(this@MainActivity, NewActivity::class.java)
            startActivity(intent)
        }
    }
}

ขั้นตอนที่ 4: สร้าง NewActivity

Layout (activity_new.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"
    android:padding="16dp"
    tools:context=".NewActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="40dp"
        android:text="New Activity"
        android:textColor="@android:color/holo_green_dark"
        android:textSize="24sp"
        android:textStyle="bold" />

    <Button
        android:id="@+id/btnOpenMain"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="Go back to MainActivity" />

</RelativeLayout>

NewActivity.kt

import android.content.Intent
import android.os.Bundle
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity

class NewActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_new)
        title = "KotlinApp"

        val button = findViewById<Button>(R.id.btnOpenMain)
        button.setOnClickListener {
            val intent = Intent(this@NewActivity, MainActivity::class.java)
            startActivity(intent)
        }
    }
}

ขั้นตอนที่ 5: Manifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.example.switchactivity">
    <application ... >
        <activity android:name=".MainActivity"> ... </activity>
        <activity android:name=".NewActivity" />
    </application>
</manifest>

แนวทางปฏิบัติที่ดีกว่า (Best Practices)

  • หลีกเลี่ยงการสร้าง Activity ใหม่ซ้ำ: ใช้ Intent.FLAG_ACTIVITY_REORDER_TO_FRONT หรือ FLAG_ACTIVITY_CLEAR_TOP
  • ส่งข้อมูลระหว่าง Activity: ใช้ intent.putExtra() และ getIntent().getIntExtra()
  • Navigation Component: ในโปรเจกต์ขนาดใหญ่ ควรใช้ Jetpack Navigation แทน Intent ตรงๆ
  • Back Stack: กดปุ่ม Back จะกลับไป Activity ก่อนหน้าโดยอัตโนมัติ ไม่ต้องเขียนโค้ดเพิ่ม

การทดสอบ

รันแอป กดปุ่ม "Open Second Activity" จะไปหน้า NewActivity กด "Go back to MainActivity" จะกลับมาหน้าแรก