Android列表點(diǎn)擊事件定義的一些思考
前言
列表在我們的日常開發(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ì)帶來一個(gè)問題,就是如果列表項(xiàng)點(diǎn)擊事件重復(fù)還好說,假如有類似下面的界面
如果競(jìng)賽咨詢是打開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 對(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)擊能夠更加自由,更方便。希望這篇文章能讓你有所收獲,我們下期再見????????
到此這篇關(guān)于Android列表點(diǎn)擊事件定義的一些思考的文章就介紹到這了,更多相關(guān)Android列表點(diǎn)擊事件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android實(shí)現(xiàn)手勢(shì)滑動(dòng)(左滑和右滑)
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)手勢(shì)滑動(dòng),左滑和右滑效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07Android實(shí)現(xiàn)Tab切換界面功能詳解
這篇文章主要為大家詳細(xì)介紹了Android如何實(shí)現(xiàn)Tab切換界面的功能,以及對(duì)Tab變化事件進(jìn)行監(jiān)聽。文中示例代碼講解詳細(xì),感興趣的可以了解一下2022-05-05Android Studio 通過登錄功能介紹SQLite數(shù)據(jù)庫的使用流程
SQLite是一款輕型的數(shù)據(jù)庫,是遵守ACID的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它包含在一個(gè)相對(duì)小的C庫中。這篇文章主要介紹了Android Studio 通過登錄功能介紹SQLite數(shù)據(jù)庫的使用流程,需要的朋友可以參考下2018-09-0925個(gè)實(shí)用酷炫的Android開源UI框架
本文為大家分享了25個(gè)實(shí)用酷炫的Android開源UI框架,靈活運(yùn)用這些UI框架可在日常工作中節(jié)省不少時(shí)間2018-04-04Android實(shí)現(xiàn)仿網(wǎng)易今日頭條等自定義頻道listview 或者grideview等item上移到另一個(gè)view中
這篇文章主要介紹了Android實(shí)現(xiàn)仿網(wǎng)易今日頭條等自定義頻道listview 或者grideview等item上移到另一個(gè)view中 的相關(guān)資料,需要的朋友可以參考下2016-03-03Flutter學(xué)習(xí)之SliverList和SliverGird的使用詳解
Sliver的組件一般都用在CustomScrollView中,除了SliverAppBar之外,我們還可以為CustomScrollView添加List或者Grid來實(shí)現(xiàn)更加復(fù)雜的組合效果。本文就來聊聊SliverList和SliverGird的使用吧2023-02-02融會(huì)貫通Android?Jetpack?Compose中的Snackbar
這篇文章主要為大家介紹了融會(huì)貫通Android?Jetpack?Compose中的Snackbar方法及使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01