RecyclerView使用(二)多种Item布局、添加点击事件
来源:互联网 发布:广州php招聘 编辑:程序博客网 时间:2024/05/01 17:02
一、RecyclerView的多种Item布局
getItemViewType()方法同ListView中的一样,在Item有多种布局时使用。在onCreateViewHolder(ViewGroup parent, int viewType) 中的第二个参数就是Item的类型,在onBindViewHolder(final ListViewAdapter.ListViewHolder holder, int position)中可以通过 holder instanceof XXXHolder来进行判断类型,来进行相应的操作.
public class MultipleItemAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { public static enum ITEM_TYPE { ITEM_TYPE_IMAGE, ITEM_TYPE_TEXT } private final LayoutInflater mLayoutInflater; private final Context mContext; private String[] mTitles; public MultipleItemAdapter(Context context) { mTitles = context.getResources().getStringArray(R.array.titles); mContext = context; mLayoutInflater = LayoutInflater.from(context); } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == ITEM_TYPE.ITEM_TYPE_IMAGE.ordinal()) { return new ImageViewHolder(mLayoutInflater.inflate(R.layout.item_image, parent, false)); } else { return new TextViewHolder(mLayoutInflater.inflate(R.layout.item_text, parent, false)); } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (holder instanceof TextViewHolder) { ((TextViewHolder) holder).mTextView.setText(mTitles[position]); } else if (holder instanceof ImageViewHolder) { ((ImageViewHolder) holder).mTextView.setText(mTitles[position]); } } @Override public int getItemViewType(int position) { return position % 2 == 0 ? ITEM_TYPE.ITEM_TYPE_IMAGE.ordinal() : ITEM_TYPE.ITEM_TYPE_TEXT.ordinal(); } @Override public int getItemCount() { return mTitles == null ? 0 : mTitles.length; } public static class TextViewHolder extends RecyclerView.ViewHolder { @InjectView(R.id.text_view) TextView mTextView; TextViewHolder(View view) { super(view); ButterKnife.inject(this, view); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d("TextViewHolder", "onClick--> position = " + getPosition()); } }); } } public static class ImageViewHolder extends RecyclerView.ViewHolder { @InjectView(R.id.text_view) TextView mTextView; @InjectView(R.id.image_view) ImageView mImageView; ImageViewHolder(View view) { super(view); ButterKnife.inject(this, view); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d("ImageViewHolder", "onClick--> position = " + getPosition()); } }); } }}
二、点击事件
1)自定义点击事件接口
public interface OnClickItemListener { void onClickItem(View view, String tag); }
2)在适配器Adapter中设置方法
private OnClickItemListener listener;public void setOnClickItemListener(OnClickItemListener listener) { this.listener = listener; }
3)在onBindViewHolder(…)中为相应的控件添加点击方法,方法中调用自定义的点击事件
holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { listener.onClickItem(view, (String) view.getTag()); } });
当点击item时就会出发点击事件,就会调用自定义的onClickItem方法。
4)为adapter注册监听,通过adapter向外暴露的方法
adapter.setOnClickItemListener(new OnClickItemListener() { @Override public void onClickItem(View view, String tag) { //点击后想要做的事 } });
注意
使用RecyclerView时要在builder中添加依赖。直接添加这个就可以了。
compile ‘com.android.support:design:23.2.1’
0 0
- RecyclerView使用(二)多种Item布局、添加点击事件
- Android RecyclerView使用(二) -给Item添加点击事件
- 从头开始学 RecyclerView(二) 添加item点击事件
- Kotlin实战(二): 实现RecyclerView多种Item布局
- RecyclerView多种item布局
- 初识RecyclerView(二)——添加item的点击事件
- RecyclerView多布局与Item点击事件
- 为RecyclerView添加item的点击事件(个人备忘录)
- RecyclerView 给Item添加点击事件
- RecyclerView + CardView 添加Item点击事件
- 为RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件
- 给RecyclerView的Item添加点击事件
- Hibernate总结------对象的三种状态
- PHP程序员成长路线
- PostgreSQL:“ FATAL: requested WAL segment00800002A0 has already been removed”
- 剁椒鱼头
- jsp之间传值乱码问题
- RecyclerView使用(二)多种Item布局、添加点击事件
- CRC校验
- Objective-C Runtime 运行时之四:Method Swizzling
- Intent:从一个Activity到另一个Activity
- # Apache Hadoop Yarn: Yet Another Resource Negotiator论文解读
- Word关于目录和页码的使用记录
- SVN 管理 Android 项目
- 在Struts2中实现Web系统的初始化工作
- php 微信第三方登录验证