神刀安全网

Android:RecyclerView详解之基础用法(一)

Android:RecyclerView详解之基础用法(一)

相信大家在实际的开发当中,几乎上每个项目或多或少都会用到列表的地方。但是在RecyclerView出来之前都是的ListView或者GridView实现列表用于显示数据,而现在Google官方是推荐大家使用RecyclerView实现列表的。下面为大家介绍RecyclerView的介绍、优势和基本用法等。

目录
Android:RecyclerView详解之基础用法(一)

1、RecyclerView介绍

  • RecyclerViewAndroid-support-v7-21 版本中新增的一个Widgets组件,比ListView更加灵活,拓展性更强。
  • 可以和CardView组件组合使用,效果更佳。
  • 官网对RecyclerView的介绍。
     A flexible view for providing a limited window into a large data set.  (能够在有限的窗口中展示大数据集合的灵活视图。)

2、与ListView的比较

  • item长按、点击事件
    ListView默认支持item的长按(OnItemLongClickListener)与点击(OnItemClickListener)事件。
    RecyclerView默认是不提供这两个接口的。这需要我们自己去封装。不过RecyclerView为我们提供了RcyclerView.OnItemTouchListener接口,此为item的触摸事件。

  • 分割线
    ListView可以再布局中设置分割线颜色(属性:divider)和分割线高度(属性:dividerHeight),同时可以在代码 里面设置。

    <ListView   android:id="@+id/list_view"   android:layout_width="match_parent"   android:layout_height="match_parent"   android:divider="@color/colorAccent"   android:dividerHeight="1dp"/>

    或者

    listView.setDivider(getResources().getDrawable(R.color.common_color_white)); listView.setDividerHeight(10);

    RecyclerView则使用其RecyclerView.ItemDecoration来实现,ItemDecorationitem的装饰类,使实现方式更加灵活,同时样式更加丰富,后面会为大家详细讲解,并举例用自定义ItemDecoration实现RecyclerVew的二级列表。

  • item呈现方式
    ListView只能实现垂直线性的呈现方式,网格呈现方式只能用GridView
    RecyclerView只要设置LayoutManager,就能实现不同的呈现方式,并且可以实现瀑布流的方式,注意,RecyclerView.LayoutManager必须设置,不然会报错。

  • ViewHolder数据绑定
    在我们使用ListView的时候并不是必须使用ViewHolderListView进行优化,因为没有严格的ViewHolder模式。
    但是在RecyclerView中,必须实现至少一个ViewHolder,而且必须遵循ViewHolder模式设计原则。在后续提到的RecyclerView实现二级列表或多item情况下就可以看出ViewHolder模式是多么的优雅。

  • Item动画
    ListView中是没有提供任何方法和接口的。在滑动删除或者是其他item操作的时候,感觉整个页面很生硬,当然要实现ListViewitem动画也是可以的,不过得增加很多代码量。
    RecyclerView中是直接提供了这方面的方法的,只需要设置RecyclerView.ItemAnimator就可以达到item的动画效果。

3、RecyclerView用法

  • step1 —-添加依赖
    compile 'com.android.support:recyclerview-v7:25.3.1'
  • step2 —-编写布局
    <android.support.v7.widget.RecyclerView     android:id="@+id/recycler_view"     android:layout_width="match_parent"     android:layout_height="wrap_content" >
  • step3 —-编写adapter

    public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder>{     private Context mContext;     private List<String> mData;      public CustomAdapter(){}      public CustomAdapter(Context mContext){         this.mContext = mContext;         mData = new ArrayList<>();     }      public void addData(List<String> data){         mData.clear();         mData.addAll(data);         notifyDataSetChanged();     }      @Override     public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {         ViewitemView=LayoutInflater.from(mContext).inflate(R.layout.item_custom,parent,false);         ViewHolder viewHolder = new ViewHolder(itemView);         return viewHolder;     }      @Override     public void onBindViewHolder(ViewHolder holder, final int position) {          holder.customItemText.setText(mData.get(position));     }      @Override     public int getItemCount() {          return mData.size();     }      public class ViewHolder extends RecyclerView.ViewHolder{           public TextView customItemText;           public ViewHolder(View itemView) {              super(itemView);              customItemText = (TextView) itemView.findViewById(R.id.custom_item_text);          }      } }

    在此贴上 item_custom.xml的布局代码

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout     xmlns:android="http://schemas.android.com/apk/res/android"     android:orientation="vertical"     android:layout_width="match_parent"     android:layout_height="wrap_content"     android:padding="12dp">    <TextView       android:id="@+id/custom_item_text"       android:layout_width="match_parent"       android:layout_height="wrap_content"       android:textSize="15sp"       android:drawableRight="@mipmap/more_icon"       android:gravity="center_vertical"/>  </LinearLayout>
  • step4 —-在activity或fragment根据id中找到该控件并使用

     private void initRecycler() {       //设置LayoutManager       LinearLayoutManager manager = new LinearLayoutManager(this);       manager.setOrientation(LinearLayoutManager.VERTICAL);        mainRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);       mainRecyclerView.setLayoutManager(manager);        //添加默认分割线       mainRecyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));       adapter = new CustomAdapter(this);       mainRecyclerView.setAdapter(adapter);        mData = new ArrayList<>();       for (int i = 0 ; i < 20 ; i++){           mData.add(i,i+"");       }        //绑定数据       adapter.addData(mData);  }

    以上代码本人亲测有效,添加数据的时候请自行定义变量,在这里因为篇幅的原因就不贴出界面的所有代码了。

运行截图:

Android:RecyclerView详解之基础用法(一)

运行截图

4、总结
这只是本人对经验的一些总结,自己对知识掌握的一个回顾。同时也想把自己学到的东西分享出来。在后续的文章会为大家讲解在实际项目开发中遇到的各种复杂的用法。

到目前为止RecyclerView出现已许久了,作为一个Android开发者而言,我们应该遵循Materail Design的风格。我写这篇文章主要是针对极少数知道RecyclerView但没用过的或者是才开始学习Android开发的开发者而写的,大牛请自行绕过。

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » Android:RecyclerView详解之基础用法(一)

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址