本篇文章同步發表在 HKT 線上教室 部落格,線上影音教學課程已上架至 Udemy 和 Youtube 頻道。另外,想追蹤更多相關技術資訊,歡迎到 臉書粉絲專頁 按讚追蹤喔~
範例名稱:藥局詳細資訊頁
開發人員:HKT (侯光燦)
程式語言:Kotlin
開發環境:Android Studio 4.1.2 & Android 11 & Kotlin 1.4.21
授權範圍:使用時必須註明出處且不得為商業目的之使用
範例下載點:點我下載
昨天我們建立了,點擊列表中的項目事件時,會將資料傳遞到下一頁,但當跳到下一頁「藥局詳細資訊頁」後,昨天我們只是很單純的在輸出資訊視窗,印出該筆點擊項目的藥局名稱,今天我們將要接著繼續做下去,將傳遞過來的資料,呈現在 UI 畫面當中。
activity_pharmacy_detail.xml,沿用之前的藥局卡片設計,額外再加入電話與住址欄位資料。
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:layout_marginRight="10dp"
app:cardCornerRadius="8dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/layout_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="20dp">
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="15dp"
android:text="藥局名稱"
android:textColor="#424242"
android:textSize="30dp"
app:layout_constraintBottom_toTopOf="@+id/layout_adult"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/layout_adult"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_amount_info"
android:padding="10dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@+id/layout_child"
app:layout_constraintTop_toBottomOf="@+id/tv_name">
<TextView
android:id="@+id/tv_adult"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="成人口罩"
android:textColor="#ffffff"
android:textSize="20dp"
android:textStyle="bold"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_adult_amount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="口罩數量"
android:textColor="#ffffff"
android:textSize="16dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_adult" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/layout_child"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_amount_info"
android:padding="10dp"
app:layout_constraintLeft_toRightOf="@+id/layout_adult"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_name">
<TextView
android:id="@+id/tv_child"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="小孩口罩"
android:textColor="#ffffff"
android:textSize="20dp"
android:textStyle="bold"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_child_amount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="口罩數量"
android:textColor="#ffffff"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_child" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/layout_phone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginTop="40dp"
android:layout_marginRight="20dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/layout_adult">
<ImageView
android:id="@+id/iv_phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_baseline_phone_24" />
<TextView
android:id="@+id/tv_phone"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:text="00-00000000"
android:textSize="16dp"
app:layout_constraintLeft_toRightOf="@+id/iv_phone"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@+id/iv_phone" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/layout_address"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_marginRight="20dp"
app:layout_constraintLeft_toLeftOf="@+id/layout_phone"
app:layout_constraintTop_toBottomOf="@+id/layout_phone">
<ImageView
android:id="@+id/iv_address"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_baseline_map_24" />
<TextView
android:id="@+id/tv_address"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:text="00-00000000"
android:textSize="16dp"
app:layout_constraintLeft_toRightOf="@+id/iv_address"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@+id/iv_address" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
File -> New -> Vector Asset
在專案的 build.gradle 需加入 vectorDrawables.useSupportLibrary = true。需向下相容,因為 Android 6(SDK 23)之前,尚未支援向量圖片格式。
android {
...
defaultConfig {
...
vectorDrawables.useSupportLibrary = true
}
}
在 PharmacyDetailActivity 裡,將傳遞過來的資料解析,指定顯示到 UI 元件上。
class PharmacyDetailActivity : AppCompatActivity() {
private val data by lazy { intent.getSerializableExtra("data") as? Feature }
private val name by lazy { data?.properties?.name }
private val maskAdultAmount by lazy { data?.properties?.mask_adult }
private val maskChildAmount by lazy { data?.properties?.mask_child }
private val phone by lazy { data?.properties?.phone }
private val address by lazy { data?.properties?.address }
private lateinit var binding: ActivityPharmacyDetailBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// setContentView(R.layout.activity_pharmacy_detail)
binding = ActivityPharmacyDetailBinding.inflate(layoutInflater)
setContentView(binding.root)
initView()
}
private fun initView() {
binding.tvName.text = name ?: "資料發生錯誤"
binding.tvAdultAmount.text = maskAdultAmount.toString()
binding.tvChildAmount.text = maskChildAmount.toString()
binding.tvPhone.text = phone
binding.tvAddress.text = address
}
}
HKT 線上教室
https://tw-hkt.blogspot.com/
Freepik
https://www.freepik.com/
那今天【iThome 鐵人賽】就介紹到這邊囉~
順帶一提,KT 線上教室,臉書粉絲團,會不定期發佈相關資訊,不想錯過最新資訊,不要忘記來按讚,追蹤喔!也歡迎大家將這篇文章分享給更多人喔。
我們明天再見囉!!!掰掰~