
今天我有一串UserData 想以 ListView 呈現。
身為有經驗的Android 工程師會開始想 RecyclerView 搭配 RecyclerView.Adapter 跟 ViewHolder 再xml 定義RecyclerView ,然後每一個ListItem 有自己的 xml &@$!#% 。
在你還沒講完的時候,用Jetpack Compose已經寫完了,看一下Jetpack Compose 寫出來會是什麼樣?
class ComposeListActivity : ComponentActivity() {
data class User(val id: Int, val name: String) // 資料長這樣
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 生成200個Users
val users = (0..200).map {
User(it, "帥哥$it 號")
}
setContent {
MaterialTheme{
LazyColumn {
items(users) { user-> // 定義要以什麼東西去生為ListView
Row(horizontalArrangement = Arrangement.SpaceBetween){ // 個別Item的View
Text(text = "我的ID是${user.id}")
Text(text = "我的名字是${user.name}")
}
}
}
}
}
}
}
沒錯大概就20行左右且完全不需要Xml ,只要把你的資料塞進去,再決定每個Item要生什麼View,就可以完成一個列表的呈現。
我們來看看實際畫面大概啥樣:

跟傳統方法比起來可以省下很多代碼以及時間,讓你早點下班喔。
而且現在Compose跟傳統的UI是可以並存的,你也可以在傳統Xml 定義一塊屬於ComposeView去做操作。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/hello_world"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Hello Android!" />
<androidx.compose.ui.platform.ComposeView
android:id="@+id/compose_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
這邊就不細談共存的操作生命週期之類了,主要是讓大家體驗一下Compose跟傳統方法的比較。
結論:不是說舊的方法不好,主要是建議大家嘗試新的一些套件以及實作方法(Compose Flutter),找到屬於自己的偷懶方法早點下班這樣。
Ps. Jetpack Compose 現在主要的劣勢應該是 ,由於剛出來不久才1.x.x版 又有一個強勁對手(Flutter ) ,導致外面有在使用或嘗試的公司很少,前一陣子我面試提到Compose的時候,基本上面試公司都是沒在使用或不清楚,導致我講的東西很像在瞎掰XDD。
就醬我是黃得瑜,希望你能拍個手,促進手部血液循環。