博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RecyclerView onItemClick button和布局都有单击事件时的处理方式
阅读量:6849 次
发布时间:2019-06-26

本文共 3151 字,大约阅读时间需要 10 分钟。

RecyclerView为了给开发人员提供更大的自由度。没有默认的提供onItemClick接口。

, 适用于不须要针对item里面某个button做特殊处理的情况

我眼下项目的需求是,

1.单击item,跳转到用户信息页。

2.单击加关注button,更改button状态。

adapter代码例如以下

public class MyAdapter extends RecyclerView.Adapter
{ private List
mList; //用户列表 private Context mContext; public PraisedAdapter(Context context,List
list){ mContext = context; this.mList = list; } @Override public BaseViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View itemView = LayoutInflater.from(viewGroup.getContext()). inflate(R.layout.adapter_test, viewGroup, false); return new BaseViewHolder(itemView, new IMyViewHolderClicks() { @Override public void onItemClick(String uid) { // 跳转到个人信息页。依据uid获取个人信息 } //假设须要刷新某个特定界面。则參数中包括position @Override public void onFollowStatusChange(final User user,final int position) { //与server交互,假设成功,刷新当前button文字的 "关注"为"已关注" notifyItemChanged(position); } }); } @Override public void onBindViewHolder(final BaseViewHolder baseViewHolder,final int position) { User user = mList.get(position); baseViewHolder.bind(user); } @Override public int getItemCount() { return mList.size(); } public class BaseViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ TextView tvFollowStatus; //关注button LinearLayout linearContainer; //整个item的根布局 IMyViewHolderClicks mListener; public BaseViewHolder(View v,IMyViewHolderClicks listener) { super(v); tvFollowStatus = (TextView)v.findViewById(R.id.tv_follow_status); linearContainer = (LinearLayout)v.findViewById(R.id.linear_container); mListener = listener; tvFollowStatus.setOnClickListener(this); linearContainer.setOnClickListener(this); } public void bind(User user) { if(user.getIs_attention()==1){ tvFollowStatus.setText("已关注"); }else{ tvFollowStatus.setText("加关注"); } //将实体绑定到view上面 tvFollowStatus.setTag(user); tvFollowStatus.setClickable(true); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.tv_follow_status: tvFollowStatus.setClickable(false); mListener.onFollowStatusChange((User) tvFollowStatus.getTag(),getLayoutPosition()); break; case R.id.linear_container: mListener.onItemClick(((User)tvFollowStatus.getTag()).getId()); break; } } } private interface IMyViewHolderClicks{ //单击整个item跳转到用户界面。须要传递uid public void onItemClick(String uid); //关注button,须要更新button的状态 public void onFollowStatusChange(User user,int position); }}
曾经在常常在绑定数据(bindViewHolder)中增加setOnClickListener(new View.OnClickListener),这样每次都创建会非常影响效率。

你可能感兴趣的文章
Xmanager 连接 AIX 系统
查看>>
java的锁机制
查看>>
如何避免项目管理黑洞-为什么要使用redmine
查看>>
[]+与[]表达式
查看>>
.Net平台下ActiveMQ入门实例
查看>>
C#语言获取控制面板“程序和功能”列表
查看>>
外网语音通信准备资料
查看>>
写字机器人开发之:python opencv linux下合作操作摄像头
查看>>
if-else选择结构
查看>>
一 网络概述 每天记录一点点
查看>>
oracle 阻塞会话的查看与解除
查看>>
这个分类为Linux学习笔记
查看>>
java并发编程实践
查看>>
【学习笔记】Android的线程和线程池
查看>>
SAP相关网站
查看>>
Linux系统管理(一)安装Linux操作系统
查看>>
python获取外网IP并发邮件
查看>>
vscode+typescript开发环境搭建
查看>>
浅谈SQL SERVER中事务的ACID
查看>>
设置expire_logs_days自动删除
查看>>