我想用RecyclerView來做List點項目開新頁,但是沒有內建項目點擊(OnItemClick)事件,怎辦?
參考:
多方法比較派:30Sparks、掘金。
OnClickListener派:Little Robots、AndroidPub、StackOverflow、CSDN1、CSDN2、冰封承諾、CSDN3。
OnItemTouchListener派:segmentfault、木楊。
說明:
從參考資料看來,處理點擊項目分為兩大派:OnClickListener派、跟OnItemTouchListener,
OnClickListener派 ─ 寫法比較簡單,但是其中又分好幾支派:
- 整個RecyclerView傳進一個Support Class處理,在onChildViewAttachedToWindow時加上OnClickLisener,詳見Little Robots。
- 在onBindLoopViewHolder時加上OnClickLisener,最常見的簡單作法,詳見StackOverflow、CSDN3。
- 在onCreateViewHolder時加上OnClickLisener,通常是怕Bind觸發太多次,在那處理效能會變低,詳見冰封承諾。
- 在ViewHolder的Constructor(建構子)裡加上OnClickLisener,理由跟上面一樣,而且code在ViewHodler看起來Adapter裡的code會少一點,詳見AndroidPub、CSDN1、CSDN2。
OnItemTouchListener派 ─ 寫法比較複雜,但是會覺得自己用官方介面比較厲害(誤)。
只是這方法要寫兩個class,一個繼承OnItemTouchListener處理項目觸碰事件、另一個繼承SimpleOnGestureListener分析觸碰的手勢是不是點擊(Click),詳見segmentfault、木楊。
這幾種方法的話,
我還是比較偏好在ViewHolder的Constructor(建構子)裡加上OnClickLisener,因為簡單;
如果要重複使用那我推薦Little Robots的方案。
其中,ItemClick事件的傳遞大部分都用interface傳到外面的Fragment或是Activity,只是也找到用RxJava傳的方法,但RxJava這裡還沒寫到,就先跳過囉,有興趣自己Google相關範例。
沒有留言:
張貼留言