前言
由于RecyclerView里面没有提供条目的点击事件,这里进行了添加,如果想看RecyclerView的基础使用可以参考:
RecyclerView(一)
RecyclerView的滑动监听(三)
RecyclerView之横向展示(四)
RecyclerView之瀑布流(五)
RecyclerView优化
实现
第一步
采用接口回调的方式来实现,先准备一个接口,放在自定义的Adapter文件里面,不用当做内部类的形式
interface sendListener{
void send(int positon);
}
这里只用position当做参数,是为了 演示,具体可以根据自己的需求来提供不同的参数
第二步
让适配器持有这个自定义接口的对象,并且对外暴露
private sendListener sendListener; //持有这个接口的对象
public void setSendListener(com.yuyi.myrecyclerstudy.sendListener sendListener) {
this.sendListener = sendListener;
}//对外暴露规则
第三步
在自定义的ViewHolder里面完成调用
public class MyViewHodler extends RecyclerView.ViewHolder{
TextView name,time;//定义的两个变量
//必须要重写其构造方法,发现参数是View,可以认为是每一个条目的View(视图)
//可以认为是第二步
public MyViewHodler(View itemView) {
super(itemView);
name = (TextView) itemView.findViewById(R.id.textview_name);
time = (TextView) itemView.findViewById(R.id.textview_time);
//在这里得到了视图,因此在这里对于视图进行加点击事件
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (sendListener != null){
sendListener.send(getLayoutPosition());
//通过getLayoutPosition得到其位置,这个是关键。这里对于这个条目进行添加点击事件
}
}
}); //另外这里是对于itemView加的点击事件,如果情况特殊完全可以只对于某个View加上点击事件。
}
}
第四步
在外界就可以使用其点击事件了
liAdater.setSendListener(new sendListener() {
@Override
public void send(final int positon) {
Toast.makeText(MainActivity.this,""+positon,Toast.LENGTH_SHORT).show();
}
}
效果如图:
device-2017-03-09-112305.png
总结
原本这样,RecyclerView已经具有点击事件了,可以满足正常的需求了,但是RecyclerView本身提供了
很大的自由性和一些动画,这里就顺便演示某些动画效果
补充一
在自定义的Adapter类中加上,增添一个条目和删除一个条目的对外的方法
//针对于带有动画的删除一个item
public void removeItem(int position){
list.remove(position);
notifyItemRemoved(position);
}
//针对与带有动画的增加一个item
public void addItem(int position,beans1 b){
list.add(position,b);//先改变数据源
notifyItemInserted(position);
}
补充二
在点击事件处理时候加上AlertDialog 进行处理,完成效果:
liAdater.setSendListener(new sendListener() {
@Override
public void send(final int positon) {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setIcon(R.mipmap.ic_launcher);
builder.setTitle("请选择你的操作");
builder.setNegativeButton("删除", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
liAdater.removeItem(positon);
}
});
builder.setPositiveButton("增加", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
beans1 b = new beans1();
b.setTime("99");
b.setName("新");
liAdater.addItem(positon,b);
}
});
builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialogInterface) {
Toast.makeText(MainActivity.this,"用户取消了操作",Toast.LENGTH_SHORT).show();
}
});
builder.show();
}
});
效果如图:
device-2017-03-09-113239_20170309175536.gif









网友评论