自從成為一個Android開發者到現在默默的也7 8年有了,某天開始突然想到要整理一下自己碎片化的一些資訊,自己的履歷、練習範例、蒐藏的文章等等之類的,才突然又想起....原來我還有個部落格.... 既然又翻出來了,那就陸陸續續開始整理吧。Go go!
RecyclerView是Android開發中常用的元件,新手階段通常就是把DataList中的資料資料顯示出來,偶而再加個點擊事件使用,今天就分享個簡單的單選功能。
RecyclerView+Adapter的使用部份這邊就不多做說明了
要完成單選功能有幾種方式可以實現
要完成單選功能有幾種方式可以實現
這邊就用最簡單的方式,來人!上代碼!
TestAdapter.kt
class TestAdapter(private val dataTypeList: Array對!你看的沒有錯,就只是多一個selectPosition來記憶選中的item而已) : RecyclerView.Adapter< TestAdapter. TestViewHolder >() { //選擇的位置 var selectPosition = 0 class TestViewHolder(v: View) : RecyclerView.ViewHolder(v) { val itemName: TextView = v.findViewById(R.id.item_name) } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TestViewHolder { return TestViewHolder( LayoutInflater.from(parent.context).inflate(R.layout.item_test, parent, false) ) } override fun onBindViewHolder(holder: TestViewHolder, position: Int) { holder.itemName.text = dataList[position] holder.itemName.isSelected = holder.layoutPosition == selectPosition holder.itemName.setOnClickListener { holder.itemView.isSelected = true //設置新的position selectPosition = position notifyDataSetChanged() } } override fun getItemCount(): Int { return dataList.size } }
onBIndViewHolder內的
holder.layoutPosition == selectPosition
主要就是在判斷當前的holder.itemView是否是被選擇的狀態
所以當一開始selectPosition我們的預設值就設定為0
自然代表資料中的第一筆預設是被select的狀態
當點擊事件觸發時
selectPosition就會被點擊的position替換
執行notifyDataSetChanged()後Adapter做更新
所以當一開始selectPosition我們的預設值就設定為0
自然代表資料中的第一筆預設是被select的狀態
當點擊事件觸發時
selectPosition就會被點擊的position替換
執行notifyDataSetChanged()後Adapter做更新
onBIndViewHolder內的
holder.layoutPosition == selectPosition 就會去做select的狀態判斷
效果的話 元件就可以搭配"selector"來做選擇的效果
例如:
selector_text_color.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:color="#FFFFFF" />
<item android:color="#808080" />
</selector>
如果元件selected的狀態為true的話,顏色設置為"#FFFFFF"
預設狀態顏色則為"#808080"
以上是最簡單的RecyclerView單選功能實現,如果還要考慮到效能的部份就要考慮到更多部分
以上是最簡單的RecyclerView單選功能實現,如果還要考慮到效能的部份就要考慮到更多部分
綁定級局部更新等等之類的問題,哪天有想到的話再打上來補充吧。
題外話,眼尖的應該有看到....
題外話,眼尖的應該有看到....
Adapter內的語法是Kotlin....
對!沒錯!就是Kotlin!
Android近年的資訊量爆炸進化,開發app的選擇多了許多...
只能說學不完阿~~(不學又不行,畢竟還是靠這技能吃飯)
後續的文章就不會只限定Java的語法了
可能也會分享一些資訊相關的技術文章~
只能說學不完阿~~(不學又不行,畢竟還是靠這技能吃飯)
後續的文章就不會只限定Java的語法了
可能也會分享一些資訊相關的技術文章~
沒有留言:
張貼留言