【Android 入門開發實戰:口罩地圖】RecyclerView 跳頁&資料傳遞(1)

 

【Android 入門開發實戰:口罩地圖】線上免費講義課程目錄

項目設定id值

    ...
    ...
    ...
  <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/layout_item"
      ...
      >
    ...
    ...
    ...

新建空白 Activity

在目錄上按右鍵點選,選擇「New」->「Activity」->「Empty Activity」,檔名為:PharmacyDetailActivity。

加入 CallBack 介面

在 MainAdapter.kt,定義 CallBack 介面

 interface IItemClickListener {
        fun onItemClickListener(data: Feature)
    }

然後繼續在 MainAdapter.kt,卡片 UI 上加入監聽點擊事件,並在事件中加入CallBack 回傳當下項目資料。

...
...
...

override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
...
...
...

 holder.itemViewBinding.layoutItem.setOnClickListener {
            itemClickListener.onItemClickListener(pharmacyList[position])
        }
}

...
...
...

接著 MainAdapter 加入 CallBack 參數

class MainAdapter(private val itemClickListener: IItemClickListener) :
   ... {
...
...
...
    }

所以 MainActivity 會去實作這個 CallBack,並在收到回呼時執行跳頁並傳遞該筆藥局資料。

class MainActivity : AppCompatActivity(), MainAdapter.IItemClickListener {
...
...
...
viewAdapter = MainAdapter(this)
...
...
...
 override fun onItemClickListener(data: Feature) {
        val intent = Intent(this, PharmacyDetailActivity::class.java)
        intent.putExtra("data",data)
        startActivity(intent)
    }
}

這時 data 會報錯,所以我們需要將要傳遞過的資料類別 PharmacyInfo.kt,宣告為序列化(Serializable)即可。

data class PharmacyInfo(
    ...
):Serializable

data class Feature(
    ...
):Serializable

data class Geometry(
    ...
):Serializable

data class Properties(
    ...
):Serializable

PharmacyDetailActivity.kt

//獲取
private val data by lazy { intent.getSerializableExtra("data") as Feature }
...
...
...
//印出資料
Log.d("HKT", "藥局名稱:${data.property.name}")

輸出結果

看點到哪一張卡片,就會印出該張藥局的名稱

藥局名稱:黃藥局

萬惡錯誤 NullPointerException

但假設資料,沒有正確傳遞過來,將會引起 Caused by: java.lang.NullPointerException 造成 APP 不可預期閃退,所以需要再修改一下,確保資料為空時,仍可以正常顯示。

private val data by lazy { intent.getSerializableExtra("data") as? Feature }
...
...
...
val name = data?.property?.name
Log.d("HKT", "藥局名稱:${name ?: "資料錯誤"}")

其中 「as Feature」,是指強行將資料轉換成 Feature。「as? Feature」,as 後面多一個問號,是確保資料不為空才進行轉換。

程式碼範例

範例名稱:基本跳頁和資料傳遞
開發人員:HKT (侯光燦)
程式語言:Kotlin
開發環境:Android Studio 4.1.2 & Android 11 & Kotlin 1.4.21
授權範圍:使用時必須註明出處且不得為商業目的之使用
範例下載點:點我下載

這個網誌中的熱門文章

2023 最新入門零基礎 Kotlin教學【從零開始學 Kotlin 程式設計】Kotlin 教學課程目錄 (Android Kotlin, IntelliJ IDEA, Android Studio, Android APP 開發教學)

Android Studio 歷代版本下載點

2022 最新入門零基礎 Flutter教學 【Flutter 程式設計入門實戰 30 天】Flutter 教學課程目錄 (IntelliJ IDEA 開發教學)

最新入門零基礎 Java 教學【從零開始學 Java 程式設計】Java教學課程目錄 (IntelliJ IDEA 開發教學)

nano 文字編輯器