//define interface public interface OnRecyclerViewItemClickListener { void onItemClick(View view, int data); } public interface OnRecyclerItemLongListener{ void onItemLongClick(View view,int position); } public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) { this.mOnItemClickListener = listener; } public void setOnItemLongClickListener(OnRecyclerItemLongListener listener){ this.mOnItemLong = listener; }
(2)在ViewHolder中實現接口並重寫方法html
@Override public void onClick(View v) { if (mOnItemClickListener != null) { //注意這裏使用getTag方法獲取數據 mOnItemClickListener.onItemClick(v, getAdapterPosition()); } } @Override public boolean onLongClick(View v) { if(mOnItemLong != null){ mOnItemLong.onItemLongClick(v,getPosition()); } return true; }
(3)在活動實現這兩個方法git
adapter.setOnItemClickListener(new AlarmPresetAdapter.OnRecyclerViewItemClickListener() { @Override public void onItemClick(View view, int data) { T.showShort(context, "點擊了"); } }); adapter.setOnItemLongClickListener(new AlarmPresetAdapter.OnRecyclerItemLongListener() { @Override public void onItemLongClick(View view, int position) { T.showShort(context, "長按了"); } });
解決方案:參考博客:Recyclerview.getLayoutPosition()問題數據庫
使用了ViewHolder的getLayoutPosition方法,此方法返回的pos值與onBindViewHolder方法傳入的position值有可能不一樣。
根據SDK中的解釋,在Recyclerview 進行添加、移除item等操做時,position位置可能會變化,而全部的adapter的刷新並不老是及時的,只有這個方法返回的纔是當前item通過一些變換後所處的真正位置。ide
getPosition()方法已過期,getAdapterPosition()方法的刷新不夠及時,使用時可能會出錯,而使用getLayoutPosition()方法則沒有這種顧慮,最終在兩個onclick方法都使用了getLayoutPosition()方法,解決問題。佈局
問題記錄及解決過程:
爲了完成好需求規格說明書,咱們在碼雲上新建了一個項目,而後想要將它和本身的Android Studio連上。在這個過程當中我遭遇到了很多的問題。
首先,不太記得如何鏈接碼雲的我先上百度找來了一個教程,挺詳細的,AndroidStudio新建項目推送到碼雲上。我跟着這個教程一步步的去實現。
而後我確實出現瞭如教程中同樣的結果。
但以後遇到的問題就不是如此,我在終端輸入命令行,但一直出現錯誤
以後,我向隊友尋求幫助。
先
結果出現了超時的問題,就是使用git clone從新checkout源也受到影響,長時間checkout不出來。
而後找了一個很好的解決方法。
解決Gitlab的The remote end hung up unexpectedly錯誤學習
尋找R文件
關於在ViewPager的子頁面中不能跳轉的問題優化