关于RecyclerView的随笔
来源:互联网 发布:网上买白酒 知乎 编辑:程序博客网 时间:2024/05/02 21:02
最近在研究RecyclerView,因为项目中有个横向的图片滑动,第一想法用listview,最后想了想用5.0新推出的这个控件试试看吧
1.第一步你可以选择自定义控件达到最好的效果,也可以像我这样把它直接写到布局中
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent" >
- <android.support.v7.widget.RecyclerView
- android:id="@+id/id_recyclerview_horizontal"
- android:layout_width="match_parent"
- android:layout_height="120dp"
- android:layout_centerVertical="true"
- android:background="#FF0000"
- android:scrollbars="none" />
- </RelativeLayout> (注:没有包的要添加v7包,注意版本,这是很多导致控件不出来的原因!compile 'com.android.support:appcompat-v7:23.3.0'会自动在build下面生成)
2.给它添加item布局 原理和listview一样,根据你实际的项目需求添加想要的控件
3.建造适配器,主要有三个方法getItemCount()获取总条数,onCreateViewHolder()创建ViewHolder(这点貌似和listview一样做了优化复用的view,而在RecyclerView是把ViewHolder作为缓存单位了,然后convertView作为ViewHolder的成员变量保持在ViewHolder中,这就相当于listview中的getView()复用ViewHolder),onBindViewHolder()将数据绑定至ViewHolder。所以创建适配器的时候要继承RecyclerView.ViewHolder 下面是代码。
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> { private Context context; private ArrayList<RecyclerView_data>arrayList; private ImageView iv_zhuye_yisheng_img; private OnItemClickLitener mOnItemClickLitener; /** * ItemClick的回调接口 * @author zhy * */ public interface OnItemClickLitener { void onItemClick(View view, int position,int which); } public void setOnItemClickLitener(OnItemClickLitener mOnItemClickLitener) { this.mOnItemClickLitener = mOnItemClickLitener; } public RecyclerViewAdapter(Context context,ArrayList<RecyclerView_data>arrayList) { this.context = context; this.arrayList=arrayList; } @Override public RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_item,parent, false); ViewHolder viewHolder = new ViewHolder(view); viewHolder.iv_zhuye_yisheng_img = (ImageView) view.findViewById(R.id.iv_zhuye_yisheng_img); viewHolder.tv_zhuye_yisheng_name= (TextView) view.findViewById(R.id.tv_zhuye_yisheng_name); viewHolder.tv_zhuye_yisheng_department= (TextView) view.findViewById(R.id.tv_zhuye_yisheng_department); viewHolder.ll_yuyue= (LinearLayout) view.findViewById(R.id.ll_yuyue); return viewHolder;} @Override public void onBindViewHolder(final RecyclerViewAdapter.ViewHolder holder, final int position) { holder.tv_zhuye_yisheng_name.setText(arrayList.get(position).getName()); holder.tv_zhuye_yisheng_department.setText(arrayList.get(position).getDepartment()); iv_zhuye_yisheng_img=holder.iv_zhuye_yisheng_img; Glide.with(context).load(arrayList.get(position).getThumb()).placeholder(R.mipmap.yingyongtubiao).diskCacheStrategy(DiskCacheStrategy.ALL).into(iv_zhuye_yisheng_img); /**给imageView设置监听跳转到医生详情界面 * */ iv_zhuye_yisheng_img.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mOnItemClickLitener.onItemClick(holder.iv_zhuye_yisheng_img, position,0); } }); /**给预约添加监听,跳转到预约界面 * */ holder.ll_yuyue.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mOnItemClickLitener.onItemClick(holder.ll_yuyue, position,1); } }); } @Override public int getItemCount() { return arrayList.size(); } public static class ViewHolder extends RecyclerView.ViewHolder { public ViewHolder(View itemView) { super(itemView); } ImageView iv_zhuye_yisheng_img; TextView tv_zhuye_yisheng_name,tv_zhuye_yisheng_department; LinearLayout ll_yuyue; }又因为RecyclerView没有setOnItemClickLitener()来监听他的item,所以在Adapt里面写了接口以便于回调。
4.调用其适配器,实现监听item
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);recyclerView.setLayoutManager(linearLayoutManager);
这是和listview不一样的地方,它多了个LinearLayoutManager,而且这个必须先设置不然会出错,可以设置为水平或垂直。
然后设置设配器
recyclerViewAdapter = new RecyclerViewAdapter(HomepageActivity.this, arrayList);recyclerView.setAdapter(recyclerViewAdapter);要是你的数据从网页上下载的,还需要调用
recyclerViewAdapter.notifyDataSetChanged();来更新适配器数据(我就是前面没调用,出现加载不出来,好烦。我用的okhttp解析)
接下来监听
recyclerViewAdapter.setOnItemClickLitener(new RecyclerViewAdapter.OnItemClickLitener() { @Override public void onItemClick(View view, int position,int which) { switch (which){ case 0: Toast.makeText(HomepageActivity.this,"aaaaaaa",Toast.LENGTH_SHORT).show(); break; case 1: startActivity(new Intent(HomepageActivity.this,YuyueActivity.class)); break; } }});int which 就是你item里面的控件,这样你就可以点击里面的控件干不同的事情了。
这样就完成了一个横向recyclerView,和分别点击其item控件干不同事情的demo了。
0 0
- 关于RecyclerView的随笔
- 关于RecyclerView的使用
- 关于RecyclerView的疑惑
- 关于RecyclerView的使用
- 关于RecyclerView的一切
- 关于RecyclerView的ItemDecoration
- 关于学习的随笔
- 关于计算机专业的随笔
- 关于NSNotificationCenter 的随笔
- 关于数据库的随笔
- 【随笔】关于排序的一些随笔
- android关于RecyclerView的使用
- 关于RecyclerView的高级使用
- 关于RecyclerView的一些概念
- 关于RecyclerView的预加载
- 关于RecyclerView的Adapter封装
- 关于RecyclerView的一些笔记
- 关于Recyclerview的一些常见问题
- Python切片小结
- TestNG 学习总结 - 异常测试(十)
- C++指针详解
- Android 一些鲜为人知的方法
- ScrollView中软键盘弹出依然遮住控件
- 关于RecyclerView的随笔
- cookie、session
- 数据库(二):高级检索
- 如何优雅地进行页面间的跳转(iOS)
- 刷机简单教程,双清及错误解决细节
- 多目录工程的 makefile 范例
- Android 最火的快速开发框架XUtils
- inux下切换到root权限有以下几种方式
- android studio 使用gradle 导出jar包,并打包assets目录