Android提供的滚动控件--------RecyclerView,可以说是一个增强班的ListView.不仅可以轻松实现ListView的效果,更是优化了了ListView的不足之处。同时也是Android官方推荐使用的。
RecyclerView的基本用法:
RecyclerView属于新增控件,为了让RecyclerView能在所有的Android版本上都能使用,Android团队将它定义在了support库当中。因此,想要使用RecyclerView这个控件,首先需要在项目中build.gradle中添加相应的依赖库才行。
dependencies {
compile 'com.android.support:recyclerview-v7:24.2.1'
}
添加完以后别忘了Sync Now同步一下,然后就可以使用RecyclerView了。首先是Xml中的代码
因为我在写Dome的时候同时使用了Glide,Retrifit和SwipeRefreshLayout所以我只介绍用法不会贴上太详细的代码,不过我会在最后附上下载地址,大家有兴趣也可以下载一下来看看。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="chart.echart.recyclerviewdome.ui.MainActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
</LinearLayou
接下来就要为RecyclerView准备一个适配器了,让这个适配器继承子RecyclerView.Adapter,并将泛型指定为"自定义适配器类名.ViewHolder"
public class GankListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context context;
private List<Gank> meiZhis;
public GankListAdapter(Context context, List<Gank> meiZhis) {
this.context = context;
this.meiZhis = meiZhis;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View rootView = LayoutInflater.from(parent.getContext()).inflate(R.layout.gank_itme_meizhi,parent,false);
return new GankMeiZhiViewHolder(rootView);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof GankMeiZhiViewHolder){
GankMeiZhiViewHolder gankMeiZhiViewHolder = (GankMeiZhiViewHolder) holder;
gankMeiZhiViewHolder.bindItem(meiZhis.get(position));
}
}
@Override
public int getItemCount() {
return meiZhis.size();
}
class GankMeiZhiViewHolder extends RecyclerView.ViewHolder {
@Bind(R.id.card_meizhi)
CardView card_meizhi;
@Bind(R.id.iv_meizhi)
ImageView iv_meizhi;
@Bind(R.id.tv_meizhi_title)
TextView tv_meizhi_title;
public GankMeiZhiViewHolder (View itemView){
super(itemView);
ButterKnife.bind(this,itemView);
}
public void bindItem(final Gank meizhi) {
tv_meizhi_title.setText(meizhi.getDesc());
Glide.with(context).load(meizhi.getUrl()).centerCrop().skipMemoryCache(true).into(iv_meizhi);
}
}
}
垂直布局
RecyclerView recycler = (RecyclerView)findViewById(R.id.recycler);
//必须设置不然会报错,同时也是来决定布局的关键
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
recycler.setLayoutManager(layoutManager);
GankListAdapter adapter = new GankListAdapter(context,meizhis);
recycler.setAdapter(adapter);
滚动布局
RecyclerView recycler = (RecyclerView)findViewById(R.id.recycler);
//必须设置不然会报错,同时也是来决定布局的关键
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
recycler.setLayoutManager(layoutManager);
GankListAdapter adapter = new GankListAdapter(context,meizhis);
recycler.setAdapter(adapter);
瀑布流
StaggeredGridLayoutManager linearLayoutManager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
recycler.setLayoutManager(linearLayoutManager);
gankListAdapter = new GankListAdapter(context,meizhis);
recycler.setAdapter(gankListAdapter);
下面展示一下效果图
最后附上源码,以后大家有什么想了解的也可以给我评论,然后大家一起进行专研
因为我在写Dome的时候同时使用了Glide,Retrifit和SwipeRefreshLayout所以我只介绍用法不会贴上太详细的代码