Android列表點(diǎn)擊事件定義的一些思考
前言
列表在我們的日常開(kāi)發(fā)中使用的頻率是非常高的,像下圖的歌曲播放列表,或者課程展示,那么這些場(chǎng)景都需要我們用到點(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ì)帶來(lái)一個(gè)問(wèn)題,就是如果列表項(xiàng)點(diǎn)擊事件重復(fù)還好說(shuō),假如有類似下面的界面

如果競(jìng)賽咨詢是打開(kāi)Activity,辦公信息是傳輸數(shù)據(jù),失物招領(lǐng)顯示Toast消息,那么全部依靠 pos 判斷會(huì)讓 onItemClick 里面的邏輯變得特別臃腫,同時(shí)我們修改item事件時(shí)也受 pos 的制約(因?yàn)?pos 都是提前定義好的),因此我覺(jué)得可以嘗試把點(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 對(duì)應(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) }
}
這樣做的好處就在于對(duì)于列表項(xiàng)定義事件的點(diǎn)擊能夠更加自由,更方便。希望這篇文章能讓你有所收獲,我們下期再見(jiàn)????????
到此這篇關(guān)于Android列表點(diǎn)擊事件定義的一些思考的文章就介紹到這了,更多相關(guān)Android列表點(diǎn)擊事件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android Fragment+FragmentTabHost組件實(shí)現(xiàn)常見(jiàn)主頁(yè)面(仿微信新浪)
本文主要介紹Fragment+FragmentTabHost組件實(shí)現(xiàn)常見(jiàn)主頁(yè)面,這里整理了詳細(xì)資料及簡(jiǎn)單示例代碼,有興趣的小伙伴可以參考下2016-09-09
Android WebView如何判定網(wǎng)頁(yè)加載的錯(cuò)誤
這篇文章主要介紹了Android WebView如何判定網(wǎng)頁(yè)加載的錯(cuò)誤,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下2021-04-04
android開(kāi)發(fā)之調(diào)用手機(jī)的攝像頭使用MediaRecorder錄像并播放
我們玩玩手機(jī)的錄像功能吧;今天做個(gè)調(diào)用手機(jī)的攝像頭使用MediaRecorder錄像并播放的DEMO,源碼很詳細(xì),感興趣的朋友可以了解下,希望本文對(duì)你有幫助2013-01-01
Android使用個(gè)推實(shí)現(xiàn)三方應(yīng)用的推送功能
這篇文章主要為大家詳細(xì)介紹了Android使用個(gè)推實(shí)現(xiàn)三方應(yīng)用的推送功能,感興趣的小伙伴們可以參考一下2016-08-08
android判斷動(dòng)畫(huà)已結(jié)束示例代碼
添加一個(gè)動(dòng)畫(huà)效果,發(fā)現(xiàn)動(dòng)畫(huà)沒(méi)執(zhí)行完 就直接跳轉(zhuǎn)或者finish掉,添加動(dòng)畫(huà)監(jiān)聽(tīng)事件即可,示例代碼如下2014-10-10
android開(kāi)發(fā)中使用java觀察者模式
遇到android程序中后入棧的一個(gè)Activity需要更新之前一個(gè)或者兩個(gè)以上Activity中的數(shù)據(jù)時(shí)使用,或者需要在adapter中修改Activity或者fragment的數(shù)據(jù)和ui等2014-02-02
Android activity動(dòng)畫(huà)不生效原因及解決方案總結(jié)
android activity動(dòng)畫(huà)是一個(gè)比較簡(jiǎn)單的功能。但是使用時(shí)總會(huì)由于各種小問(wèn)題導(dǎo)致動(dòng)畫(huà)失效,筆者根據(jù)自己經(jīng)驗(yàn),整理了各種可能導(dǎo)致的原因,期望能對(duì)你有所幫助2021-11-11

