網站首頁 編程語言 正文
前言
列表在我們的日常開發中使用的頻率是非常高的,像下圖的歌曲播放列表,或者課程展示,那么這些場景都需要我們用到點擊事件,點擊歌曲播放歌曲,點擊課程了解詳情,那么我們應該怎么定義點擊事件呢?
列表點擊事件的定義
在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://blog.csdn.net/weixin_43699716/article/details/122045651
相關推薦
- 2022-10-14 yum 倉庫管理 yum-config-manager
- 2022-11-30 詳解如何在Go語言中循環數據結構_Golang
- 2023-11-13 matplotlib按照論文要求繪圖并保存pdf格式
- 2023-07-25 mongodb本地連接失敗解決方案
- 2022-05-12 Kotlin generateSequence 迭代器 從1開始產生1000個素數 take 得介紹
- 2023-03-13 Android自定義Toast樣式實現方法詳解_Android
- 2022-12-13 python辦公自動化(Excel)的實例教程_python
- 2022-08-22 Nginx配置使用詳解_nginx
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支