Android開發之串列點擊事件定義的一些思考
📢Hello大家好,這里是碼上夏雨,一名安卓初學者,也會定期給大家帶來自己的學習心得📢
😍那事不宜遲,我們現在就發車😍
前言
串列在我們的日常開發中使用的頻率是非常高的,像下圖的歌曲播放串列,或者課程展示,那么這些場景都需要我們用到點擊事件,點擊歌曲播放歌曲,點擊課程了解詳情,那么我們應該怎么定義點擊事件呢?
串列點擊事件的定義
在Adapter內創建介面,并設定set方法
// 宣告介面
interface OnItemClickListener {
fun onItemClick(itemView: View?, pos: Int, itemId: Long)
}
//設定set方法
fun setOnItemClickListener(onItemClickListener: OnItemClickListener) {
mClickListener = onItemClickListener
}
使用Adapter時實作介面
adapter.setOnItemClickListener(object :BaseVastBindingAdapter.OnItemClickListener{
override fun onItemClick(itemView: View?, pos: Int, itemId: Long) {
if (pos == 0) {
//Something do when pos is equal to 0
}else if (pos == 1) {
//Something do when pos is equal to 1
}else{
}
}
})
但是這也會帶來一個問題,就是如果串列項點擊事件重復還好說,假如有類似下面的界面
如果競賽咨詢是打開Activity,辦公資訊是傳輸資料,失物招領顯示Toast訊息,那么全部依靠 pos 判斷會讓 onItemClick 里面的邏輯變得特別臃腫,同時我們修改item事件時也受 pos 的制約(因為 pos 都是提前定義好的),因此我覺得可以嘗試把點擊事件宣告在 model 里面,例如:
class VastSwipeMenuItem @JvmOverloads constructor(
private val context: Context,
val title: String = context.resources.getString(R.string.default_slide_item_title),
val icon: Drawable? = ContextCompat.getDrawable(context, R.drawable.ic_null),
val background: Drawable? = ContextCompat.getDrawable(context, R.drawable.default_menu_item_background),
val titleColor: Int = ContextCompat.getColor(context, R.color.default_menu_item_title_color),
val clickEvent: ((VastSwipeMenuItem, Int) -> Unit)? = null
) {
// 具體實作
}
這樣如果我們想定義此 item 對應的點擊事件就可以這樣:
//宣告model
val deleteItem = VastSwipeMenuItem(this@SlideActivity)
//定義點擊事件
deleteItem.setClickEvent { item: VastSwipeMenuItem, position: Int ->
run {
Toast.makeText(this@SlideActivity, "${item.title} $position", Toast.LENGTH_SHORT)
.show()
}
}
而在Adapter內我們只需如下定義點擊事件
ListItemView.setOnClickListener {
//item為根據pos獲取到的
item.clickEvent?.let { it1 -> it1(item,position) }
}
這樣做的好處就在于對于串列項定義事件的點擊能夠更加自由,更方便,希望這篇文章能讓你有所識訓,我們下期再見🤔🤔🤔🤔
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/389203.html
標籤:其他
