使用 RecyclerView 顯示可捲動的清單 (android.com) |
Layout Manager
- linear
- grid
- 垂直
- 水平
- staggered grid : 不求垂直的 grid 高度或水平的 grid 寬度一致
實作 Adapter 、ViewHolder
以下為範例,傳入 adapter 的參數與 adapter 、 view holder 的命名都並非固定
class CustomAdapter(private val dataSet: Array<String>) :
RecyclerView.Adapter<CustomAdapter.ViewHolder>() {
/**
* Provide a reference to the type of views that you are using
* (custom ViewHolder).
*/
class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val textView: TextView
init {
// Define click listener for the ViewHolder's View.
textView = view.findViewById(R.id.textView)
}
}
// Create new views (invoked by the layout manager)
override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder {
// Create a new view, which defines the UI of the list item
val view = LayoutInflater.from(viewGroup.context)
.inflate(R.layout.text_row_item, viewGroup, false)
return ViewHolder(view)
}
// Replace the contents of a view (invoked by the layout manager)
override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) {
// Get element from your dataset at this position and replace the
// contents of the view with that element
viewHolder.textView.text = dataSet[position]
}
// Return the size of your dataset (invoked by the layout manager)
override fun getItemCount() = dataSet.size
}
- class CustomAdapter : 傳入 dataset
- class ViewHolder
設置會用到的 view與其 id (不管來源檔案,只管 id) - onCreateViewHolder()
設 item 的 xml - onBindViewHolder
依據 position 設置 view 要顯示的內容與 onClickListener 等 - getItemCount()
回傳 dataset.size
在 Fragment 中設定 RecyclerView
例子 :
val recyclerView = view.findViewById<RecyclerView>(R.id.recycler_view)
recyclerView.adapter = ArticlesAdapter(articlesIDAndTitle)
recyclerView.setHasFixedSize(true)
layout XML中的設定 (實例)
在 Fragment 的 layout 中插入 RecyclerView :
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_margin="16dp"
android:scrollbars="vertical"
app:layoutManager="LinearLayoutManager">
顯示範例圖片:
tools:itemCount="16"
tools:listitem="@layout/grid_view_item"
在 Adapter 中會使用到的 item layout :
就是普通的 layout ,請自由設定。 |
ListAdapter
ListAdapter 是 RecyclerView.Adapter 類別的子類別,用來在 RecyclerView 中顯示清單資料,包括在背景執行緒上計算清單之間的差異。在此應用程式中,您將在 ListAdapter. 中使用 DiffUtil 實作。使用 DiffUtil 的優勢在於,每當新增、移除或變更 RecyclerView 中的某些項目時,系統不會重新整理整個清單。系統只會重新整理已變更的項目。
0 comments:
張貼留言