Android 中的 Bundle 示例
Android 中的 Bundle 是什麼?
在本教程中,我們將學習如何在 Android 應用程式中使用 Kotlin 作為程式語言來使用 Bundle。
Bundle 是 Android 中的一個類,用於在 Android 應用程式中將資料從一個 Activity 傳遞到另一個 Activity。我們可以使用鍵值對的方式透過 Bundle 傳遞資料。我們可以使用鍵傳遞資料,並使用相同的鍵檢索為該鍵傳遞的資料。
實現
我們將建立一個簡單的應用程式,在其中我們將簡單地顯示一個 EditText,以便使用者能夠輸入訊息。然後,我們將提供一個按鈕,用於使用 Bundle 將資料從一個 Activity 傳遞到另一個 Activity。我們將遵循分步指南在 Android 應用程式中實現 Toast 訊息。
步驟 1:在 Android Studio 中建立一個新專案
導航到 Android Studio,如下面的螢幕所示。在下面的螢幕中,單擊“新建專案”以建立新的 Android Studio 專案。
單擊“新建專案”後,您將看到下面的螢幕。
在此螢幕中,我們只需選擇“空 Activity”並單擊“下一步”。單擊“下一步”後,您將看到下面的螢幕。
在此螢幕中,我們只需指定專案名稱。然後包名將自動生成。
注意 - 確保選擇 Kotlin 作為語言。
指定所有詳細資訊後,單擊“完成”以建立新的 Android Studio 專案。
專案建立完成後,我們將看到兩個開啟的檔案,即 activity_main.xml 和 MainActivity.kt 檔案。
步驟 2:使用 activity_main.xml
導航到 activity_main.xml。如果此檔案不可見,要開啟此檔案,請在左側窗格中導航到 app>res>layout>activity_main.xml 以開啟此檔案。開啟此檔案後,將以下程式碼新增到其中。程式碼中添加了註釋以便詳細瞭解。
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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=".MainActivity"> <!-- creating text view for displaying heading--> <TextView android:id="@+id/idTVHeading" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_above="@id/idEdtMsg" android:layout_margin="20dp" android:gravity="center" android:text="Bundle in Android" android:textAlignment="center" android:textAllCaps="false" android:textColor="#FF000000" android:textSize="20sp" android:textStyle="bold" /> <!-- edit text for entering the message--> <EditText android:id="@+id/idEdtMsg" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_margin="20dp" android:hint="Enter your message" /> <!-- creating a button to copy text to clip board--> <Button android:id="@+id/idBtnPassData" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/idEdtMsg" android:layout_margin="20dp" android:text="Pass Data using Bundle" android:textAllCaps="false" /> </RelativeLayout>
說明 - 在上面的程式碼中,根元素是 Android 中的相對佈局。此佈局是一個檢視組,用於相對於彼此對齊其中的所有元素。藉助 ID 或位置,我們可以在相對佈局中相對對齊所有元素。
在此相對佈局內,我們建立的第一個檢視是 TextView。它用於顯示簡單的文字訊息。在此 TextView 控制元件中,我們將其寬度指定為 match_parent,以便它佔用移動裝置的完整寬度,並將高度指定為 wrap_content 以佔用文字高度。我們正在為我們的 TextView 指定 ID,它是該控制元件的唯一識別符號。我們可以使用此 ID 對此 TextView 執行某些操作,例如覆蓋新的文字。然後,我們新增一個 layout_above 引數以使用 EditText 檢視 ID 將此 TextView 佈局對齊到 EditText 上方。然後,我們從 TextView 的所有側新增邊距。之後,我們新增一個 text 引數,在其中我們將指定必須在 TextView 中顯示的值。指定文字後,我們將指定文字對齊方式。這將使 TextView 控制元件內的文字與控制元件的中心對齊。然後,我們將文字顏色指定為黑色,文字大小指定為 20sp,最後將文字樣式指定為粗體。
新增 TextView 後,我們將新增一個 EditText,我們將使用它來獲取使用者的輸入。在此控制元件中,我們首先指定 EditText 的 ID,我們將使用它來獲取使用者輸入的 EditText 中的資料。然後,我們將佈局寬度指定為 match_parent,並將高度指定為 wrap_content。之後,為了將此 EditText 對齊到螢幕的中心,我們添加了 layout_center_in_parent。然後,我們從 EditText 的所有側新增邊距。最後,我們為 EditText 指定提示,這將告知使用者必須在該 EditText 中輸入什麼。
新增 EditText 後,我們將新增一個按鈕,該按鈕將用於將資料從一個 Activity 傳遞到另一個 Activity。在我們的按鈕中,我們首先指定按鈕的 ID,我們將使用它來向其新增點選偵聽器。然後,我們將高度指定為 wrap_content,並將按鈕的寬度指定為 match_parent。然後,我們從按鈕的所有側新增 20dp 的邊距。之後,我們為按鈕指定文字。最後,我們為按鈕新增 textAllCaps 為 false,以使文字字型與我們在 text 標籤中指定的文字相同。
最後,我們為相對佈局新增一個結束標籤,因為 TextView 和按鈕都包含在我們的相對佈局中。
步驟 3:建立一個新的空 Activity
在專案選項卡中導航到 app 選項,然後右鍵單擊它>新建>Activity>空 Activity,併為您的 Activity 命名,如下所示。
步驟 3:使用 MainActivity.kt
導航到 MainActivity.kt。如果此檔案不可見,要開啟此檔案,請在左側窗格中導航到 app>java>您的應用程式的包名>MainActivity.kt 以開啟此檔案。開啟此檔案後,將以下程式碼新增到其中。程式碼中添加了註釋以便詳細瞭解。
package com.example.gptapp import android.content.Intent import android.os.Bundle import android.widget.Button import android.widget.EditText import androidx.appcompat.app.AppCompatActivity class MainActivity : AppCompatActivity() { // creating variables for edit text and button on below line. lateinit var messageEdt: EditText lateinit var passDataBtn: Button override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // initializing variable for video view on below line. messageEdt = findViewById(R.id.idEdtMsg) passDataBtn = findViewById(R.id.idBtnPassData) // adding click listener for button. passDataBtn.setOnClickListener { val msg = messageEdt.text.toString() // creating a bundle instance on below line val bundle = Bundle() // passing the data into the bundle bundle.putString( "message", msg ) val intent = Intent(this@MainActivity, SecondActivity::class.java) // passing the bundle to the intent on below line. intent.putExtras(bundle) startActivity(intent) } } }
說明 - 在上面為 MainActivity.kt 檔案編寫的程式碼中。首先,我們為我們建立的不同檢視(例如按鈕和 EditText)建立變數。
現在我們將看到 onCreate 方法。這是每個 Android 應用程式的預設方法。建立應用程式檢視時將呼叫此方法。在此方法中,我們設定內容檢視,即名為 activity_main.xml 的佈局檔案,以從該檔案中設定 UI。
指定檢視後,我們使用其在 activity_main.xml 檔案中給出的唯一 ID 初始化名為 passDataBtn 的按鈕變數和名為 messageEdt 的 EditText 變數。
使用其唯一 ID 初始化按鈕和 EditText 後,我們透過呼叫 setOnClickListener 方法為按鈕新增點選偵聽器。在此方法中,我們將從一個 Activity 將資料傳遞到另一個 Activity。
在 onClickListner 方法中,我們建立一個名為 msg 的變數,我們從中獲取 EditText 的資料並將其儲存在其中。之後,我們建立並初始化 Bundle 的變數。建立 Bundle 的變數後,我們使用該變數使用鍵值對傳遞資料。我們將鍵作為 message 傳遞,並將來自我們從 EditText 獲取的 sg 變數的資料傳遞。之後,我們只需為 Intent 建立一個變數,並傳遞我們必須在使用者單擊按鈕時傳遞資料的 SecondActivity。然後,我們呼叫 putExtras 以放置我們生成的必須傳送到 SecondActivity 的 Bundle。之後,我們只需呼叫 startActivity 以啟動 SecondActivity 以檢視我們傳遞的資料。
步驟 4:使用 activity_second.xml
導航到 activity_second.xml。如果此檔案不可見,要開啟此檔案,請在左側窗格中導航到 app>res>layout>activity_second.xml 以開啟此檔案。開啟此檔案後,將以下程式碼新增到其中。程式碼中添加了註釋以便詳細瞭解。
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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=".SecondActivity"> <!-- creating text view for displaying heading--> <TextView android:id="@+id/idTVHeading" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_above="@id/idTVMessage" android:layout_margin="20dp" android:gravity="center" android:text="Bundle in Android" android:textAlignment="center" android:textAllCaps="false" android:textColor="#FF000000" android:textSize="20sp" android:textStyle="bold" /> <!-- creating text view for displaying message which we passed from main activity--> <TextView android:id="@+id/idTVMessage" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_margin="20dp" android:gravity="center" android:text="Message" android:textAlignment="center" android:textAllCaps="false" android:textColor="#FF000000" android:textSize="20sp" android:textStyle="bold" /> </RelativeLayout>
說明 - 在上面的程式碼中,根元素是 Android 中的相對佈局。此佈局是一個檢視組,用於相對於彼此對齊其中的所有元素。藉助 ID 或位置,我們可以在相對佈局中相對對齊所有元素。
在此相對佈局內,我們建立的第一個檢視是 TextView。它用於顯示簡單的文字訊息。在此 TextView 控制元件中,我們將其寬度指定為 match_parent,以便它佔用移動裝置的完整寬度,並將高度指定為 wrap_content 以佔用文字高度。我們正在為我們的 TextView 指定 ID,它是該控制元件的唯一識別符號。我們可以使用此 ID 對此 TextView 執行某些操作,例如覆蓋新的文字。然後,我們新增一個 layout_above 引數以使用 message TextView ID 將此 TextView 佈局對齊到另一個 TextView 上方。然後,我們從 TextView 的所有側新增邊距。之後,我們新增一個 text 引數,在其中我們將指定必須在 TextView 中顯示的值。指定文字後,我們將指定文字對齊方式。這將使 TextView 控制元件內的文字與控制元件的中心對齊。然後,我們將文字顏色指定為黑色,文字大小指定為 20sp,最後將文字樣式指定為粗體。
新增 TextView 後,我們將建立另一個 TextView,我們將使用它來顯示我們將從 MainActivity 傳遞的訊息。
步驟 5:使用 SecondActivity.kt
導航到 SecondActivity.kt。如果此檔案不可見,要開啟此檔案,請在左側窗格中導航到 app>java>您的應用程式的包名>SecondActivity.kt 以開啟此檔案。開啟此檔案後,將以下程式碼新增到其中。程式碼中添加了註釋以便詳細瞭解。
package com.example.gptapp import android.os.Bundle import android.widget.TextView import androidx.appcompat.app.AppCompatActivity class SecondActivity : AppCompatActivity() { lateinit var messageTV: TextView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_second) messageTV = findViewById(R.id.idTVMessage) // getting the bundle from the intent val bundle = intent.extras messageTV.text = bundle!!.getString("message") } }
說明 - 在上面的程式碼中,我們首先為訊息 TextView 建立一個變數。現在,在 onCreate 方法中,我們使用我們在 activity_second.xml 檔案中指定的唯一 ID 初始化此變數。之後,我們建立並初始化 Bundle 的變數。然後,我們從 Bundle 中獲取資料並將其值設定為我們的訊息 TextView,以在 SecondActivity 中顯示從 MainActivity 傳遞的資料。
新增上述程式碼後,我們只需單擊頂欄中的綠色圖示即可在移動裝置上執行我們的應用程式。
注意 - 確保您已連線到您的真實裝置或模擬器。
結論
在以上教程中,我們學習了什麼是 Android 中的 Bundle 以及如何在 Android 應用程式中使用它來在活動之間傳遞資料。