版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】Android中如何解决RecyclerView各种点击事件
BaseRecylerAdapter类public
abstract
class
BaseRecyclerAdapter
extends
RecyclerView.Adapter<BaseViewHolder>
implements
View.OnClickListener
,View.OnLongClickListener
{
private
OnRecyclerViewItemClickListener
onRecyclerViewItemClickListener;
private
OnRecyclerViewItemLongClickListener
onRecyclerViewItemLongClickListener;
private
OnSubViewClickListener
onSubViewClickListener;
@Override
public
void
onBindViewHolder(BaseViewHolder
holder,
int
position)
{
holder.itemView.setTag(position);
holder.onBind(position);
if
(onRecyclerViewItemClickListener
!=
null)
{
holder.itemView.setOnClickListener(this);
}
if
(onRecyclerViewItemLongClickListener
!=
null)
{
holder.itemView.setOnClickListener(this);
}
if
(onSubViewClickListener
!=
null)
{
holder.setSubViewClickListener(onSubViewClickListener,position);
}
}
public
void
setOnRecyclerViewItemClickListener(OnRecyclerViewItemClickListener
onRecyclerViewItemClickListener)
{
this.onRecyclerViewItemClickListener
=
onRecyclerViewItemClickListener;
}
public
void
setOnRecyclerViewItemLongClickListener(OnRecyclerViewItemLongClickListener
onRecyclerViewItemLongClickListener)
{
this.onRecyclerViewItemLongClickListener
=
onRecyclerViewItemLongClickListener;
}
public
void
setOnSubViewClickListener(OnSubViewClickListener
listener){
this.onSubViewClickListener
=
listener;
}
@Override
public
void
onClick(View
v)
{
if
(v.getTag()
!=
null)
{
int
position
=
(int)
v.getTag();
onRecyclerViewItemClickListener.onItemClick(position);
}
}
@Override
public
boolean
onLongClick(View
v)
{
if
(v.getTag()
!=
null){
int
position
=
(int)v.getTag();
onRecyclerViewItemLongClickListener.onItemLongClick(position);
}
return
true;
}
public
interface
OnRecyclerViewItemClickListener
{
void
onItemClick(int
position);
}
public
interface
OnSubViewClickListener{
void
onSubViewClick(View
v,
int
position);
}
public
interface
OnRecyclerViewItemLongClickListener
{
void
onItemLongClick(int
position);
}
}public
interface
OnRecyclerViewItemClickListener
{
void
onItemClick(int
position);
}
public
interface
OnSubViewClickListener{
void
onSubViewClick(View
v,
int
position);
}
public
interface
OnRecyclerViewItemLongClickListener
{
void
onItemLongClick(int
position);
}@Override
public
void
onBindViewHolder(BaseViewHolder
holder,
int
position)
{
holder.itemView.setTag(position);
holder.onBind(position);
if
(onRecyclerViewItemClickListener
!=
null)
{
holder.itemView.setOnClickListener(this);
}
if
(onRecyclerViewItemLongClickListener
!=
null)
{
holder.itemView.setOnClickListener(this);
}
if
(onSubViewClickListener
!=
null)
{
holder.setSubViewClickListener(onSubViewClickListener,position);
}
}
@Override
public
void
onClick(View
v)
{
if
(v.getTag()
!=
null)
{
int
position
=
(int)
v.getTag();
onRecyclerViewItemClickListener.onItemClick(position);
}
}
@Override
public
boolean
onLongClick(View
v)
{
if
(v.getTag()
!=
null){
int
position
=
(int)v.getTag();
onRecyclerViewItemLongClickListener.onItemLongClick(position);
}
return
true;
}BaseViewHolder类public
abstract
class
BaseViewHolder
extends
RecyclerView.ViewHolder
implements
View.OnClickListener{
private
BaseRecyclerAdapter.OnSubViewClickListener
onSubViewClickListener;
public
BaseViewHolder(View
itemView)
{
super(itemView);
findViewById(itemView);
}
/**
*
传入子项点击事件所需参数
*
@param
listener
自定义的接口
*
@param
tagPosition
tag
*/
public
void
setSubViewClickListener(BaseRecyclerAdapter.OnSubViewClickListener
listener,
int
tagPosition){
this.onSubViewClickListener
=
listener;
initSubViewClick(tagPosition);
}
/**
*
通过id匹配控件(开发者自行实现)
*
@param
itemView
父布局
*/
abstract
protected
void
findViewById(View
itemView);
/**
*
用于装载数据(开发者自行实现)
*
@param
position
当前位置
*/
abstract
protected
void
onBind(int
position);
/**
*
初始化子项的点击事件(为子项设置tag)
*
@param
tagPosition
tag
*/
protected
void
initSubViewClick(int
tagPosition){
}
/**
*
实现子项点击事件的转发
*
@param
v
*/
@Override
public
void
onClick(View
v)
{
if
(v.getTag()
!=
null)
{
int
position
=
(int)
v.getTag();
onSubViewClickListener.onSubViewClick(v,position);
}
}
}/**
*
通过id匹配控件(开发者自行实现)
*
@param
itemView
父布局
*/
abstract
protected
void
findViewById(View
itemView);
/**
*
用于装载数据(开发者自行实现)
*
@param
position
当前位置
*/
abstract
protected
void
onBind(int
position);public
class
RecyclerAdapterMyActivity
extends
BaseRecyclerAdapter{
private
List<MyActivityBean>
list;
public
RecyclerAdapterMyActivity(List<MyActivityBean>list){
this.list
=
list;
}
@Override
public
BaseViewHolder
onCreateViewHolder(ViewGroup
parent,
int
viewType)
{
View
view
=
LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recycler_myactivity_activity,parent,false);
ViewHolder
holder
=
new
ViewHolder(view);
return
holder;
}
@Override
public
int
getItemCount()
{
return
list.size();
}
public
class
ViewHolder
extends
BaseViewHolder
{
private
TextView
tv_name,tv_title,tv_content;
private
Button
activityBtnChat;
private
Button
activityBtnCancel;
ViewHolder(View
itemView)
{
super(itemView);
}
@Override
protected
void
findViewById(View
itemView)
{
tv_name
=
itemView.findViewById(R.id.tv_my_activity_name);
tv_title
=
itemView.findViewById(R.id.tv_my_activity_title);
tv_content
=
itemView.findViewById(R.id.tv_my_activity_content);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年卫生高级职称考试病理学专项训练试题试卷及解析
- 2026年城市规划师考试原理科目真题改编试卷
- 2026年审计师《审计学》培训试卷(附答案)
- 2026年高校经济学原理培训试卷
- 2026年工程造价工程师《造价管理》知识点精讲冲刺卷
- 2026年教师资格《小学语文》综合素质专项全真模拟试卷
- 新能源交付合同范本
- 惠安租房短期租房合同范本
- 2026年教师资格证综合素质考试冲刺押题卷
- 政府科技管理者如何利用区域科技创新数智大脑实现精准招商引资
- 2025贵州中考文综试卷及答案
- 2025贵州铁路投资集团有限责任公司招聘情况笔试备考试题及答案
- T/CSMT-YB 008-2024智能功率变送器校准规范
- 四方退股协议书范本(2篇)
- 2025届高三生物一轮复习课件:基因工程
- T-CAAMTB 196-2024 汽车电动遮阳帘技术要求和试验方法
- 塑料吹塑成型技术的进展考核试卷
- 肺结核合并高血压的护理查房课件
- 儿童孤独症护理课件
- 学校安全管理责任分解图
- GB/T 5568-2022橡胶或塑料软管及软管组合件无曲挠液压脉冲试验
评论
0/150
提交评论