版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】Adapter中如何为RecyclerView添加单击事件
Adapter中如何为RecyclerView添加单击事件,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。RecyclerView的每个Item的点击事件并没有像ListView一样封装在组件中,需要Item的单击事件时就需要自己去实现,在Adapter中为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(Viewview)方法,然后设置给接口的事件监听:public
class
RvAdapter1
extends
RecyclerView.Adapter<RvAdapter1.DataViewHolder>
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();
}
});/**
*
Created
by
jzman
on
2017/5/13
0013.
*
RecycleView的Adapter
*/
public
class
RvAdapter1
extends
RecyclerView.Adapter<RvAdapter1.DataViewHolder>
implements
View.OnClickListener{
private
Context
mContext;
private
RecyclerView
recyclerView;
private
ArrayList<String>
mList;
public
RvAdapter1()
{}
public
RvAdapter1(Context
mContext,
ArrayList<String>
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;
}
}/**
*
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()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安徽省合肥市普通高中联盟2023-2024学年高二上学期1月期末联考数学试题
- 2024年醇类项目建议书
- 生态酒店吊顶装修合同
- 饮料配送承包协议
- 搬家服务监督合同模板
- 生鲜电商节日配送合同
- 金融投资理财居间服务合同
- 游乐场钢结构装修协议
- 银行网点装修合同协议书
- 水产制品出口海运合同解读
- 第三单元素养评价卷-2024-2025学年统编版语文一年级上册
- 《大学美育》 课件 李然 模块三 自然审美
- 2024年新华东师大版七年级上册数学全册教案(新版教材)
- 2023届济南市历下区九年级语文(上)期中考试卷附答案解析
- 部编版(2024版)七年级历史上册第6课《战国时期的社会变革》精美课件
- 2024年新人教版七年级上册生物全册教学课件(新版教材)
- 国外工程项目合同范本
- JT∕T 937-2014 在用汽车喷烤漆房安全评价规范
- 人教版小学四年级道德与法治上册《第四单元 让生活多一些绿色》大单元整体教学设计
- 个人信息安全保护管理规定
- 2024-2030年中国注塑机行业市场发展趋势与前景展望战略分析报告
评论
0/150
提交评论