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


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ListView 和 RecyclerView 都是 Android 开发中用于展示列表数据的视图组件,它们在功能上相似但有一些关键的区别: 1. **性能优化**: - ListView 在早期版本的 Android 中被广泛使用,但它在处理大量数据或滚动时性能较差,因为它是基于 AbsListView 实现的,内存管理相对较低效。 - RecyclerView 是 Android Lollipop(API 21)之后引入的,采用的是更先进的数据集适配器和视图缓存机制,能更好地处理大规模数据并实现流畅的滚动。 2. **布局管理器**: - ListView 使用的是 ListView.LayoutParams,而 RecyclerView 利用了其内置的 LayoutManager API,如 LinearLayoutManager、GridLayoutManager 等,提供了更灵活的布局方式。 3. **分页和加载更多**: - ListView 不支持直接的分页和滚动到顶部/底部加载更多功能。若要实现,开发者需要自定义滚动监听等。 - RecyclerView 内置了 CoordinatorLayout 的能力,可以轻松地配合 CoordinatorLayout 实现常见的加载更多效果,以及与 AppBarLayout 的协同。 4. **适应性**: - ListView 对于高度固定的布局(如 ListAdapter)表现较好,但不太适合自定义布局或瀑布流样式的数据展示。 - RecyclerView 支持多种视图类型(itemAnimator、ViewHolder等),可以提供更丰富的视觉效果和交互体验。 5. **扩展性和可维护性**: - RecyclerView 提供了更多的扩展点,使得定制化更加方便,且社区资源丰富,易于找到解决方案。 - ListView 的扩展性相对较弱,如果要进行深度定制可能需要更多的代码量。 相关问题: 1. ListView 和 RecyclerView 的哪个更适合处理大数据量? 2. 如何在 RecyclerView 中实现滚动到顶部的加载更多功能? 3. 如何利用 RecyclerView 的 LayoutManager 来创建瀑布流布局?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值