recycle人view多条目以及多条目的点击事件
来源:互联网 发布:儿童恐龙玩具淘宝 编辑:程序博客网 时间:2024/06/09 01:01
一实现多条目
注意创建adapter时继承
RecyclerView.Adapter不能添加viewholder泛型
如下
RecyclerView.Adapter<HomeAdapter.MyViewHolder>
如果添加泛型是无法使用多个viewholder的
1重写getviewtype事件
@Override
public int getItemViewType(int position) {
return 1;
}
其中的返回值是根据你的需要返回的
2加载布局其中viewtype是你的getviewtype的返回值
根据此值来判断加载哪个item布局
@Override
publicRecyclerView.ViewHolderonCreateViewHolder(ViewGroup parent, intviewType) {
if(viewType ==0) {
view= LayoutInflater.from(context).inflate(R.layout.item_recycler,parent, false);
MyViewHolder holder = newMyViewHolder(view);
returnholder;
}else{
view= LayoutInflater.from(context).inflate(R.layout.item2,parent, false);
MyViewHolder2 holder2 = newMyViewHolder2(view);
returnholder2;
}
}
3绑定赋值
根据你的getviewtype返回的值加载不同的viewholder
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, intposition) {
if(getItemViewType(position)==0){
((MyViewHolder) holder).tv.setText(mDatas.get(position).getTitle());
// view.setOnClickListener(this);
}else{
((MyViewHolder2) holder).tv2.setText(mDatas.get(position).getAuthor());
Glide.with(context).load(mDatas.get(position).getPic_small()).into(((MyViewHolder2) holder).imageView);
}
// 多条目点击事件
holder.itemView.setTag(position);
holder.itemView.setOnClickListener(this);
}
4viewholder根据你的item写里面的findbyid只写了两个再多以此类推
classMyViewHolderextendsRecyclerView.ViewHolder {
TextViewtv;
publicMyViewHolder(View view) {
super(view);
tv= (TextView) view.findViewById(R.id.id_num);
}
}
classMyViewHolder2extendsRecyclerView.ViewHolder {
TextViewtv2;
ImageViewimageView;
publicMyViewHolder2(View view) {
super(view);
tv2= (TextView) view.findViewById(R.id.item2_text);
imageView= (ImageView) view.findViewById(R.id.item2_image);
}
}
二点击事件
多条目点击事件
步骤
adapter中
自定义一个继承自RecyclerView.Adapter的MyAdapter。
1.在MyAdapter中定义如下接口,模拟ListView的OnItemClickListener:
- //define interface
- public static interface OnItemClickListener {
- void onItemClick(View view , int position);
- }
2声明一个这个接口的变量
- private OnItemClickListener mOnItemClickListener = null;
此方法是要给适配器adapter添加接口
implements View.OnClickListener
3将点击事件转移给外面的调用者:
@Override
- public void onClick(View v) {
- if (mOnItemClickListener != null) {
- //注意这里使用getTag方法获取position
- mOnItemClickListener.onItemClick(v,(int)v.getTag());
- }
- }
4注意上面调用接口的onItemClick()中的v.getTag()方法,这需要在onBindViewHolder()方法中设置和item的position
@Override
public voidonBindViewHolder(RecyclerView.ViewHolder holder, intposition) {
if(getItemViewType(position) ==0) {
((MyViewHolder) holder).tv.setText(mDatas.get(position).getTitle());
// view.setOnClickListener(this);
}else{
((MyViewHolder2) holder).tv2.setText(mDatas.get(position).getAuthor());
Glide.with(context).load(mDatas.get(position).getPic_small()).into(((MyViewHolder2) holder).imageView);
}
// 多条目点击事件
holder.itemView.setTag(position);
holder.itemView.setOnClickListener(this);
}
5最后暴露给外面的调用者,定义一个设置Listener的方法():
- public void setOnItemClickListener(OnItemClickListener listener) {
- this.mOnItemClickListener = listener;
- }
6调用在mainactivity中
- mAdapter.setOnItemClickListener(new OnItemClickListener(){
- @Override
- public void onItemClick(View view , int position){
- Toast.makeText(MainActivity.this, data[position], 600).show();
- }
- });
完整的adapter
public classMainAdapterextendsXRecyclerView.AdapterimplementsView.OnClickListener {
Contextcontext;
List<JsonBean.SongListBean>mDatas;
Viewview;
//点击事件的接口
privateOnItemClickListenermOnItemClickListener=null;
publicMainAdapter(Context context,List<JsonBean.SongListBean> list) {
this.context= context;
this.mDatas= list;
}
@Override
publicRecyclerView.ViewHolderonCreateViewHolder(ViewGroup parent, intviewType) {
if(viewType ==0) {
view= LayoutInflater.from(context).inflate(R.layout.item_recycler,parent, false);
MyViewHolder holder = newMyViewHolder(view);
returnholder;
}else{
view= LayoutInflater.from(context).inflate(R.layout.item2,parent, false);
MyViewHolder2 holder2 = newMyViewHolder2(view);
returnholder2;
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, intposition) {
if(getItemViewType(position) ==0) {
((MyViewHolder) holder).tv.setText(mDatas.get(position).getTitle());
// view.setOnClickListener(this);
}else{
((MyViewHolder2) holder).tv2.setText(mDatas.get(position).getAuthor());
Glide.with(context).load(mDatas.get(position).getPic_small()).into(((MyViewHolder2) holder).imageView);
}
// 多条目点击事件
holder.itemView.setTag(position);
holder.itemView.setOnClickListener(this);
}
@Override
public int getItemCount() {
returnmDatas.size();
}
@Override
public int getItemViewType(intposition) {
if(position %2==0) {
return0;
}else{
return1;
}
}
classMyViewHolderextendsRecyclerView.ViewHolder {
TextViewtv;
publicMyViewHolder(View view) {
super(view);
tv= (TextView) view.findViewById(R.id.id_num);
}
}
classMyViewHolder2extendsRecyclerView.ViewHolder {
TextViewtv2;
ImageViewimageView;
publicMyViewHolder2(View view) {
super(view);
tv2= (TextView) view.findViewById(R.id.item2_text);
imageView= (ImageView) view.findViewById(R.id.item2_image);
}
}
public static interface OnItemClickListener {
voidonItemClick(View view, int position);
}
public void setOnItemClickListener(OnItemClickListener listener) {
this.mOnItemClickListener= listener;
}
@Override
public void onClick(View v) {
if(mOnItemClickListener!=null) {
//注意这里使用getTag方法获取position
mOnItemClickListener.onItemClick(v,(int) v.getTag());
}
}
}
阅读全文
0 0
- recycle人view多条目以及多条目的点击事件
- RecyclerView_多条目---点击事件
- recyclerview点击事件 webview 多条目
- RecyclerView 多条目 包括点击事件
- Android RecyclerView的多条目加载的点击事件
- Android 拦截Recyclerview的多条目点击事件
- Recyclerview的条目点击事件
- viewpager条目点击事件
- viewpager条目点击事件
- recycleview条目点击事件
- recyclerview点击条目事件
- recyclerview条目点击事件
- recyclerview单击事件和多条目点击事件
- RecycleView条目点击事件的实现方法
- 关于Recyview的条目点击事件
- RecycleView适配器及多条目及点击事件
- 多条目加监听事件
- recycle都条目展示
- 如何装系统-不能联网的情况下
- Just colorSensor and show red,green,purple
- Qt入门之信号与槽机制
- 【java笔记】day03
- SQL视图
- recycle人view多条目以及多条目的点击事件
- this指向详解及改变它的指向的方法
- training set, validation set, test set的区别
- linux suspend 流程简介(1)
- Spring + Mybatis 单元测试 (DAO)
- tensorflow实现 Inception V3
- Mycat简介
- struts2入门
- Maile邮件工具类