您的位置:首页 > 移动开发 > Android开发

Android进阶之RecyclerView

2017-03-31 17:12 239 查看

前言:

       现在市面上越来越多的Android手机开始适配Android5.0和Android6.0系统,随着系统的适配,Android5.0和6.0提供的一些新的东西也慢慢的被人们接受。作为开发人员来讲,我们也需要实时的学习与更新自己的技术,今天我就来介绍一下Android5.0新提供的列表控件——RecyclerView:RecyclerView可以很完美的取代ListView,解决了ListView的一些优化方面的东西,提供了更多选择。接下来就来一起学习一下RecyclerView!

开始之前先来看张图:



图中图片加载是使用的Picasso框架加载,有兴趣的可以看看这http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/0731/1639.html

第一步:RecyclerView是Android5.0提供的,在使用之前需要先导入design包

compile 'com.android.support:design:25.2.0'


第二步:使用RecyclerView:在XML文件中直接引用即可

<android.support.v7.widget.RecyclerView
android:id="@+id/recycleview"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>


第三步:初始化以及适配器:

在activity中对RecyclerView进行初始化

适配器的写法如下:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private Context context;
private List<SubjectsInfo> datas;
public MyAdapter(List<SubjectsInfo> datas, Context context) {
this.datas = datas;
this.context = context;
}
public void setDatas(List<SubjectsInfo> datas) {
this.datas = datas;
this.notifyDataSetChanged();
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.item_view, parent, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.tvtitle.setText(datas.get(position).getTitle());
Picasso.with(context).load(datas.get(position).getImages().getLarge()).into(holder.ivmove);

}
@Override
public int getItemCount() {
return datas.size();
}
protected class MyViewHolder extends RecyclerView.ViewHolder {
ImageView ivmove;
TextView tvtitle;

public MyViewHolder(View itemView) {
super(itemView);
ivmove = (ImageView) itemView.findViewById(R.id.iv_movie);
tvtitle = (TextView) itemView.findViewById(R.id.tv_title);
}
}
}

然后在activity中设置适配器,记住这个地方需要特别注意,RecyclerView需要我们自己去定义显示的样式通过setLayoutManager方法来进行相应的设置

RecyclerView提供三种可选择的显示样式:

一:StaggeredGridLayoutManage 瀑布流的样式

二:GridLayoutManager 网格式的样式

三:LayoutManage 线行的样式三种样式来供我们选择。

最后 :简单介绍一下RecyclerView的监听事件怎么处理

RecyclerView本身是没有提供item的单击长按类似的监听的,那我们需要怎么去实现呢?如下所示:

这里采用接口回调的方式来实现:首先实现一个接口

public interface OnItemClickListener{
4000
void itemClick(View view,int position);
}

然后是先这个接口的set方法

public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}


最后让itemView实现监听

itemView.setOnClickListener(this);

在onclick方法中回传

@Override
public void onClick(View v) {
if (onItemClickListener != null){
onItemClickListener.itemClick(v,getAdapterPosition());
}
}

最后一步真的是最后一步了,在activity中利用adapter来实现接口进行相应的逻辑
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息