iT邦幫忙

2025 iThome 鐵人賽

DAY 15
0
Mobile Development

Android 開發者養成計畫:從程式邏輯到作品集實戰系列 第 15

Day15- App 的任意門!頁面切換 (Intent) 與資料傳遞

  • 分享至 

  • xImage
  •  

在第十四天的挑戰中,成功打造了一個具備「記憶」功能的待辦清單 App。這證明你已經掌握了 App 開發中最核心的資料持久化技術。

我們點擊一則新聞標題後,會跳到新聞的詳細內容頁面。這時,我們就需要一個能夠在不同畫面之間切換的工具,也就是今天的重點:Intent

什麼是 Intent

  • 簡單比喻Intent 就是 App 的 「通行證」「任意門」。它是一個用來表達 App「意圖」的物件。
    • 你可以告訴 App:「我打算打開一個新的畫面。」
    • 你也可以告訴 App:「我打算從這個畫面,傳遞一些資料到下一個畫面。」
  • 用途
    • App 內部:從一個 Activity 跳轉到另一個 Activity
    • App 之間:例如,在你的 App 中點擊「分享」按鈕,就會啟動手機裡的其他 App(如 Line、Facebook)。

實作時間:打造一個「多頁面 App」

今天要製作一個 App,當你點擊列表項目時,App 會跳轉到一個新的頁面,並顯示你點擊的名字。

1. 建立一個新的頁面 (Activity)

首先,我們需要準備好要跳轉到的新頁面。

  • 在 Android Studio 中,找到左側的專案目錄,右鍵點擊 MainActivity.java 所在的資料夾。
  • 選擇 New -> Activity -> Empty Views Activity
  • 給新的 Activity 取名為 DetailActivity。Android Studio 會自動為你建立 DetailActivity.javaactivity_detail.xml 這兩個檔案。

2. 設計新頁面的「設計圖」

打開新建立的 activity_detail.xml 檔案。我們只需要一個 TextView 來顯示從前一個頁面傳過來的名字。

`<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
   `` xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".DetailActivity">

    <TextView
        android:id="@+id/detailTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="點擊了某某某"
        android:textSize="30sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>`

3. 修改 MyAdapter.java:使用 Intent 傳遞資料

打開你的「翻譯官」檔案 MyAdapter.java。我們要在 onBindViewHolder方法中,用Intent來啟動DetailActivity`,並將點擊的名字傳遞給它。

// MyAdapter.java
import android.content.Intent;
import android.content.Context;
// ... 省略其他 import ...

@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
    String text = dataList.get(position);
    holder.itemTextView.setText(text);

    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String clickedName = dataList.get(position);

            // 建立 Intent 這個「通行證」
            Context context = v.getContext();
            Intent intent = new Intent(context, DetailActivity.class);

            // 把要傳遞的名字放進通行證裡
            intent.putExtra("name", clickedName);

            // 啟動這個通行證,App 就會跳轉頁面了!
            context.startActivity(intent);
        }
    });
}
// ... 省略其他程式碼 ...`

4. 修改 DetailActivity.java:接收資料

打開新建立的 DetailActivity.java 檔案。我們要在 onCreate 方法中,從 Intent 裡讀取傳過來的資料。

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

public class DetailActivity extends AppCompatActivity {

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

        // 1. 取得從前一個頁面傳過來的 Intent
        String name = getIntent().getStringExtra("name");

        // 2. 找到 detailTextView 元件
        TextView detailTextView = findViewById(R.id.detailTextView);

        // 3. 將接收到的名字顯示在 TextView 上
        detailTextView.setText("你點擊了:" + name);
    }
}`

5. 執行你的 App!

  • 點擊綠色的「」按鈕,執行你的 App。
  • 點擊列表中的任何一個名字,App 就會跳轉到新的頁面,並顯示出你點擊的名字!

day15

今日總結

今天我們學會了如何使用 Intent 進行頁面切換:

  • 透過 Intent 這個「通行證」,我們能夠在 App 內部切換不同的 Activity
  • 透過 putExtra() 方法,我們能夠將資料從一個頁面傳遞到另一個頁面。
  • 透過 getIntent()getStringExtra() 方法,我們能夠在新的 Activity 中接收資料。

明天,將進入一個全新的階段,學習更系統化的 App 程式碼管理:程式架構。我們會從最基礎的 MVC 模式開始,探討為什麼我們需要它。

明天見!


上一篇
Day14- 第二階段挑戰:具備記憶功能的待辦清單 App
系列文
Android 開發者養成計畫:從程式邏輯到作品集實戰15
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言