//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的子页面中不能跳转的问题优化