滚动控件RecyclerView的简单使用

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);
        }
    }
}


适配器定义好了以后就可以在Activity中使用了,RecyclerView那么招人喜欢还是有原因的,因为它像女人一样善变,你可以让它站着(垂直滚动),也可以让它躺着 (横向滚动),最后它还能实现瀑布流布局。下面我们就简单的来分别实现一下

垂直布局

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所以我只介绍用法不会贴上太详细的代码


猜你喜欢

转载自blog.csdn.net/jia_you1/article/details/78910793