在第十四天的挑戰中,成功打造了一個具備「記憶」功能的待辦清單 App。這證明你已經掌握了 App 開發中最核心的資料持久化技術。
我們點擊一則新聞標題後,會跳到新聞的詳細內容頁面。這時,我們就需要一個能夠在不同畫面之間切換的工具,也就是今天的重點:Intent
。
Intent
?Intent
就是 App 的 「通行證」 或 「任意門」。它是一個用來表達 App「意圖」的物件。
Activity
跳轉到另一個 Activity
。今天要製作一個 App,當你點擊列表項目時,App 會跳轉到一個新的頁面,並顯示你點擊的名字。
Activity
)首先,我們需要準備好要跳轉到的新頁面。
MainActivity.java
所在的資料夾。New
-> Activity
-> Empty Views Activity
。DetailActivity
。Android Studio 會自動為你建立 DetailActivity.java
和 activity_detail.xml
這兩個檔案。打開新建立的 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>`
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);
}
});
}
// ... 省略其他程式碼 ...`
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);
}
}`
今天我們學會了如何使用 Intent
進行頁面切換:
Intent
這個「通行證」,我們能夠在 App 內部切換不同的 Activity
。putExtra()
方法,我們能夠將資料從一個頁面傳遞到另一個頁面。getIntent()
和 getStringExtra()
方法,我們能夠在新的 Activity
中接收資料。明天,將進入一個全新的階段,學習更系統化的 App 程式碼管理:程式架構。我們會從最基礎的 MVC
模式開始,探討為什麼我們需要它。
明天見!