2018年2月5日 星期一

[Android] RecyclerView OnItemClick實作

問題:
我想用RecyclerView來做List點項目開新頁,但是沒有內建項目點擊(OnItemClick)事件,怎辦?

參考:
多方法比較派:30Sparks掘金
OnClickListener派:Little RobotsAndroidPubStackOverflowCSDN1CSDN2冰封承諾CSDN3
OnItemTouchListener派:segmentfault木楊

說明:
從參考資料看來,處理點擊項目分為兩大派:OnClickListener派、跟OnItemTouchListener,


OnClickListener派 ─ 寫法比較簡單,但是其中又分好幾支派:
  • 整個RecyclerView傳進一個Support Class處理,在onChildViewAttachedToWindow時加上OnClickLisener,詳見Little Robots
  • 在onBindLoopViewHolder時加上OnClickLisener,最常見的簡單作法,詳見StackOverflowCSDN3
  • 在onCreateViewHolder時加上OnClickLisener,通常是怕Bind觸發太多次,在那處理效能會變低,詳見冰封承諾
  • 在ViewHolder的Constructor(建構子)裡加上OnClickLisener,理由跟上面一樣,而且code在ViewHodler看起來Adapter裡的code會少一點,詳見AndroidPubCSDN1CSDN2


OnItemTouchListener派 ─ 寫法比較複雜,但是會覺得自己用官方介面比較厲害(誤)。

只是這方法要寫兩個class,一個繼承OnItemTouchListener處理項目觸碰事件、另一個繼承SimpleOnGestureListener分析觸碰的手勢是不是點擊(Click),詳見segmentfault木楊


這幾種方法的話,
我還是比較偏好在ViewHolder的Constructor(建構子)裡加上OnClickLisener,因為簡單;
如果要重複使用那我推薦Little Robots的方案


其中,ItemClick事件的傳遞大部分都用interface傳到外面的Fragment或是Activity,只是也找到用RxJava傳的方法,但RxJava這裡還沒寫到,就先跳過囉,有興趣自己Google相關範例。

沒有留言:

張貼留言