Android列表點(diǎn)擊事件定義的一些思考
前言
列表在我們的日常開發(fā)中使用的頻率是非常高的,像下圖的歌曲播放列表,或者課程展示,那么這些場景都需要我們用到點(diǎn)擊事件,點(diǎn)擊歌曲播放歌曲,點(diǎn)擊課程了解詳情,那么我們應(yīng)該怎么定義點(diǎn)擊事件呢?
列表點(diǎn)擊事件的定義
在Adapter內(nèi)創(chuàng)建接口,并設(shè)置set方法
// 聲明接口
interface OnItemClickListener {
fun onItemClick(itemView: View?, pos: Int, itemId: Long)
}
//設(shè)置set方法
fun setOnItemClickListener(onItemClickListener: OnItemClickListener) {
mClickListener = onItemClickListener
}
使用Adapter時(shí)實(shí)現(xiàn)接口
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{
}
}
})
但是這也會(huì)帶來一個(gè)問題,就是如果列表項(xiàng)點(diǎn)擊事件重復(fù)還好說,假如有類似下面的界面

如果競賽咨詢是打開Activity,辦公信息是傳輸數(shù)據(jù),失物招領(lǐng)顯示Toast消息,那么全部依靠 pos 判斷會(huì)讓 onItemClick 里面的邏輯變得特別臃腫,同時(shí)我們修改item事件時(shí)也受 pos 的制約(因?yàn)?pos 都是提前定義好的),因此我覺得可以嘗試把點(diǎn)擊事件聲明在 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
) {
// 具體實(shí)現(xiàn)
}
這樣如果我們想定義此 item 對應(yīng)的點(diǎn)擊事件就可以這樣:
//聲明model
val deleteItem = VastSwipeMenuItem(this@SlideActivity)
//定義點(diǎn)擊事件
deleteItem.setClickEvent { item: VastSwipeMenuItem, position: Int ->
run {
Toast.makeText(this@SlideActivity, "${item.title} $position", Toast.LENGTH_SHORT)
.show()
}
}
而在Adapter內(nèi)我們只需如下定義點(diǎn)擊事件
ListItemView.setOnClickListener {
//item為根據(jù)pos獲取到的
item.clickEvent?.let { it1 -> it1(item,position) }
}
這樣做的好處就在于對于列表項(xiàng)定義事件的點(diǎn)擊能夠更加自由,更方便。希望這篇文章能讓你有所收獲,我們下期再見????????
到此這篇關(guān)于Android列表點(diǎn)擊事件定義的一些思考的文章就介紹到這了,更多相關(guān)Android列表點(diǎn)擊事件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android Fragment+FragmentTabHost組件實(shí)現(xiàn)常見主頁面(仿微信新浪)
本文主要介紹Fragment+FragmentTabHost組件實(shí)現(xiàn)常見主頁面,這里整理了詳細(xì)資料及簡單示例代碼,有興趣的小伙伴可以參考下2016-09-09
Android WebView如何判定網(wǎng)頁加載的錯(cuò)誤
這篇文章主要介紹了Android WebView如何判定網(wǎng)頁加載的錯(cuò)誤,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下2021-04-04
android開發(fā)之調(diào)用手機(jī)的攝像頭使用MediaRecorder錄像并播放
我們玩玩手機(jī)的錄像功能吧;今天做個(gè)調(diào)用手機(jī)的攝像頭使用MediaRecorder錄像并播放的DEMO,源碼很詳細(xì),感興趣的朋友可以了解下,希望本文對你有幫助2013-01-01
Android使用個(gè)推實(shí)現(xiàn)三方應(yīng)用的推送功能
這篇文章主要為大家詳細(xì)介紹了Android使用個(gè)推實(shí)現(xiàn)三方應(yīng)用的推送功能,感興趣的小伙伴們可以參考一下2016-08-08
Android activity動(dòng)畫不生效原因及解決方案總結(jié)
android activity動(dòng)畫是一個(gè)比較簡單的功能。但是使用時(shí)總會(huì)由于各種小問題導(dǎo)致動(dòng)畫失效,筆者根據(jù)自己經(jīng)驗(yàn),整理了各種可能導(dǎo)致的原因,期望能對你有所幫助2021-11-11

