前一天的文章介紹到AndroidManifest.xml ,它是 RoomRush 的 App 入口地圖,告訴 Android 哪個 Activity 是第一個畫面,但它自己不是畫面。
而今天要讀的檔案是 MainActivity.kt ,它的上游就是AndroidManifest.xml ,在這裡面,它設定了 MainActivity 是 App 的首頁,負責載入首頁畫面、設定大樓下拉選單,並根據按鈕把使用者帶到查詢流程或管理者登入流程。
一開始,我知道這個檔案是 RoomRush 的首頁,當初設計首頁能先選大樓,以方便下一頁的查詢內容,右上角也有可以切換成管理者模式的按鈕。
這部分是我當時設計畫面時,覺得比較直覺操作的方法,可以一目了然整個 App 的重點。

MainActivity.kt 負責什麼和 Hermes Agent 一起重讀檔案後,我理解到MainActivity.kt 是首頁 Activity,負責首頁 UI 的互動邏輯,並把 activity_main.xml 設定成這個 Activity 的畫面內容。
從程式碼細節來看,首頁最核心的任務主要分為兩件事:設定選單與處理按鈕跳頁。
1. 設定大樓下拉選單(Spinner)
當時我是透過 ArrayAdapter 把字串陣列(Array)轉成 Spinner 可以顯示的選項:
val buildingSpinner = findViewById<Spinner>(R.id.building_spinner)
val buildings = arrayOf("聖言樓", "進修部大樓")
val buildingAdapter = ArrayAdapter(this, R.layout.custom_spinner_item, buildings)
buildingSpinner.adapter = buildingAdapter
ArrayAdapter 在這裡扮演了資料與 UI 元件之間的橋樑,把字串陣列(Array)轉換成 Spinner 可以顯示的下拉選單選項。2. 查詢按鈕:跳頁並傳遞條件
選擇完大樓後,按下查詢按鈕觸發的邏輯如下:
val selectedBuilding = buildingSpinner.selectedItem.toString()
val intent = Intent(this, QueryResultActivity::class.java).apply {
putExtra("building", selectedBuilding)
}
startActivity(intent)
startActivity)」,更重要的任務是將使用者選到的 selectedBuilding 包進 Intent 的 Extra 中,當作傳給下一個頁面的第一道查詢條件。承接 AndroidManifest.xml ,我們目前可以知道流程大概是:
AndroidManifest.xml
↓
MainActivity.kt
↓
使用者選擇大樓
↓
按下「查詢」
↓
建立 Intent、帶入 building
↓
前往 QueryResultActivity
MainActivity 是 RoomRush 的首頁,負責讓使用者選擇大樓,並透過 Intent 把大樓名稱傳給 QueryResultActivity。
Intent 把這個條件交給下一個畫面。真正的篩選/查詢流程會在後面的 QueryResultActivity 與 QueryResultViewModel 中繼續發生。
讀完 MainActivity 後,我發現首頁雖然看起來只是選大樓和按查詢,但它其實決定了 RoomRush 查詢流程的第一個條件。首頁不直接查詢空教室,而是把使用者選到的大樓包進 Intent,交給下一個頁面處理。
MainActivity是首頁,負責讓使用者選大樓,並用 Intent 把building傳給查詢頁。
讀完了 App 的門面後,下一篇就是要了解空教室查詢系統最重要的查詢部分-QueryResultActivity.kt 。
使用者選了大樓、星期、節次之後,資料到底去哪了?少了這個核心查詢頁,RoomRush 就不能稱作是一個合格的空教室查詢系統了!