android recyclerview item点击事件,RecyclerView的Item的单击事件

RecyclerView 的每个Item的点击事件并没有像ListView一样封装在组件中,需要Item的单击事件时就需要自己去实现,在Adapter中为RecyclerView添加单击事件参考如下:

RecyclerView的使用方法请参考:RecyclerView的简单使用

第一步:

在RecyclerView的Adapyer中定义单击事件的回调接口:

/**

* 定义RecyclerView选项单击事件的回调接口

*/

public interface OnItemClickListener{

//参数(父组件,当前单击的View,单击的View的位置,数据)

void onItemClick(RecyclerView parent,View view, int position, String data);

}

第二步:

在RecyclerView的Adapyer中声明该接口,并提供setter方法:

private OnItemClickListener onItemClickListener;

public void setOnItemClickListener(OnItemClickListener onItemClickListener){

this.onItemClickListener = onItemClickListener;

}

第三步:

在RecyclerView的Adapyer类实现View.OnClickListener接口,并重写onClick(View view)方法,然后设置给接口的事件监听:

public class RvAdapter1 extends RecyclerView.Adapter implements View.OnClickListener{

...

view.setOnClickListener(this);//设置监听器

...

@Override

public void onClick(View view) {

//根据RecyclerView获得当前View的位置

int position = recyclerView.getChildAdapterPosition(view);

//程序执行到此,会去执行具体实现的onItemClick()方法

if (onItemClickListener!=null){

onItemClickListener.onItemClick(recyclerView,view,position,mList.get(position));

}

}

...

}

第四步:

在MainActivity中通过Adapter设置每个Item的单击事件:

adapter.setOnItemClickListener(new RvAdapter1.OnItemClickListener() {

@Override

public void onItemClick(RecyclerView parent, View view, int position, String data) {

Toast.makeText(MainActivity.this, data, Toast.LENGTH_SHORT).show();

}

});

参考代码

Adapter

/**

* Created by jzman on 2017/5/13 0013.

* RecycleView的Adapter

*/

public class RvAdapter1 extends RecyclerView.Adapter implements View.OnClickListener{

private Context mContext;

private RecyclerView recyclerView;

private ArrayList mList;

public RvAdapter1() {}

public RvAdapter1(Context mContext, ArrayList mList) {

this.mContext = mContext;

this.mList = mList;

}

/**

* 用于创建ViewHolder

* @param parent

* @param viewType

* @return

*/

@Override

public DataViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

View view = LayoutInflater.from(mContext).inflate(R.layout.item,null);

view.setOnClickListener(this);

//使用代码设置宽高(xml布局设置无效时)

view.setLayoutParams(new ViewGroup.LayoutParams(

ViewGroup.LayoutParams.MATCH_PARENT,

ViewGroup.LayoutParams.WRAP_CONTENT));

DataViewHolder holder = new DataViewHolder(view);

return holder;

}

/**

* 绑定数据

* @param holder

* @param position

*/

@Override

public void onBindViewHolder(DataViewHolder holder, int position) {

holder.tv_data.setText(mList.get(position));

}

/**

* 选项总数

* @return

*/

@Override

public int getItemCount() {

return mList.size();

}

@Override

public void onClick(View view) {

//根据RecyclerView获得当前View的位置

int position = recyclerView.getChildAdapterPosition(view);

//程序执行到此,会去执行具体实现的onItemClick()方法

if (onItemClickListener!=null){

onItemClickListener.onItemClick(recyclerView,view,position,mList.get(position));

}

}

/**

* 创建ViewHolder

*/

public static class DataViewHolder extends RecyclerView.ViewHolder{

TextView tv_data;

public DataViewHolder(View itemView) {

super(itemView);

tv_data = (TextView) itemView.findViewById(R.id.tv_recycle);

}

}

private OnItemClickListener onItemClickListener;

public void setOnItemClickListener(OnItemClickListener onItemClickListener){

this.onItemClickListener = onItemClickListener;

}

/**

* 定义RecyclerView选项单击事件的回调接口

*/

public interface OnItemClickListener{

//参数(父组件,当前单击的View,单击的View的位置,数据)

void onItemClick(RecyclerView parent,View view, int position, String data);

}

/**

* 将RecycleView附加到Adapter上

*/

@Override

public void onAttachedToRecyclerView(RecyclerView recyclerView) {

super.onAttachedToRecyclerView(recyclerView);

this.recyclerView= recyclerView;

}

/**

* 将RecycleView从Adapter解除

*/

@Override

public void onDetachedFromRecyclerView(RecyclerView recyclerView) {

super.onDetachedFromRecyclerView(recyclerView);

this.recyclerView = null;

}

}

MainActivity

/**

* Created by jzman on 2017/5/13 0013.

*/

public class MainActivity extends AppCompatActivity {

private RecyclerView rv;

RvAdapter1 adapter;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

rv = (RecyclerView) findViewById(R.id.rv);

//设置布局管理器

// rv.setLayoutManager(new LinearLayoutManager(this));//线性

rv.setLayoutManager(new GridLayoutManager(this,4));//线性

// rv.setLayoutManager(new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.VERTICAL));//线性

adapter = new RvAdapter1(this,initData());

adapter.setOnItemClickListener(new RvAdapter1.OnItemClickListener() {

@Override

public void onItemClick(RecyclerView parent, View view, int position, String data) {

Toast.makeText(MainActivity.this, data, Toast.LENGTH_SHORT).show();

}

});

rv.setAdapter(adapter);

}

public static ArrayList initData(){

ArrayList arrayList = new ArrayList<>();

for (int i=0;i<50;i++){

arrayList.add("第"+i+"条数据");

}

return arrayList;

}

}

显示效果

e0116e4025f85f6a693477ad167e19c2.png

如果觉得有帮助,可以选择关注微信公众号:jzman-blog,一起交流学习。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值