多数据显示之强大的RecycleView 使用完全解析(初级基础篇)
来源:互联网 发布:知乎电脑版下载官网 编辑:程序博客网 时间:2024/06/06 10:58
前言
RecycleView是谷歌V7包中新增的控件,用于替代以往多数据显示的控件(ListView,GridView…),一个新的替代的事物的出现,必定有这比之前更便捷灵活的特性。那么为什么RecycleView为什么会用来替代ListView和GridView呢?
- 同类文章
多数据显示之强大的RecycleView 使用完全解析(中级篇)
特点
结构高度灵活
- LayoutManager : 控制显示方式分为LinearLayoutManager、GridLayoutManager和StaggeredGridLayoutManager,当然你也可以自定义LayoutManager,可以控制显示的方向和位置
- Adapter:适配器,下面会详细讲解
- ItemDecoration:定义每个Item之间的间距,可自定义ItemDecoration,详情参照
- ItemAnimator : item 的动画管理类
内部实现内存回收
- 内部封装了ViewHolder,加入了内存回收。
RecycleView的显示和数据加载全部分解成了几块去分别管理,以往从ListView转换成GridView需要重写布局和代码,但是现在你只需要改变一下LayoutManager就可以了,高度解耦了功能之间的联系。
基本使用
下面就说一下RecycleView的基本应用,而后几章中会补充自定义的 LayoutManager 和自定义的 ItemDecoration 来更好的扩展。
- 添加依赖(buid.gradle)
dependencies { ... compile 'com.android.support:cardview-v7:23.1.1' compile 'com.android.support:recyclerview-v7:23.1.1'}
- XML调用activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.demo.demorecycleview.MainActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/my_recycleView" android:layout_width="match_parent" android:layout_height="match_parent"/></LinearLayout>
- XML调用item_recycleview.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/colorAccent" android:orientation="vertical"> <!-- 注意此处的RelativeLayout 如果Item中,直接在根容器放入控件,会出现显示异常错误,宽和高的值都会出现误差 --> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/tv_item" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="123" android:textSize="20sp" android:textColor="@color/white" android:layout_marginTop="10dp" android:layout_marginBottom="10dp"/> </RelativeLayout></LinearLayout>
注!:Item的布局会对显示有很大的影响,如果在根容器中直接写控件,显示出来的结果相当于宽高根据控件最小的范围自适应,造成不一样的结果。所以Item在编写时最好在根容器内添加一个容器用来控制Item的间距,这样适用于简单的布局可以用这个笨方法,但是最终还是建议通过ItemDecoration来控制Item之间的间距
- MyRecycleViewAdapter
package com.demo.demorecycleview.Adapter;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import com.demo.demorecycleview.R;import java.util.List;import butterknife.Bind;import butterknife.ButterKnife;/** * Created by UnableApe */public class MyRecycleViewAdapter extends RecyclerView.Adapter<MyRecycleViewAdapter.MyViewHolder> { private List<String> mListData; @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { final View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recycleview, null); MyViewHolder mHolder = new MyViewHolder(view); return mHolder; } @Override public void onBindViewHolder(MyViewHolder holder, int position) { holder.tvItem.setText(mListData.get(position)); } @Override public int getItemCount() { return mListData.size(); } public void setListData(List list) { mListData = list; notifyDataSetChanged(); } public static class MyViewHolder extends RecyclerView.ViewHolder { @Bind(R.id.tv_item) TextView tvItem; MyViewHolder(View view) { super(view); ButterKnife.bind(this, view); } }}
自定义Adapter需重写三个方法,如上
onCreateViewHolder(ViewGroup parent, int viewType)
此方法根据不同的viewType返回不同的holder
onBindViewHolder(MyViewHolder holder, int position)
此方法根据holder绑定相关数据
getItemCount()
此方法返回数据的数量
另外还会有
getItemViewType(int position)
此方法跟距position返回不同的item的布局
会在多数据显示之强大的RecycleView 使用完全解析(中级篇)详细介绍
- MainActivity
package com.demo.demorecycleview;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import com.demo.demorecycleview.Adapter.MyRecycleViewAdapter;import java.util.ArrayList;import java.util.List;import butterknife.Bind;import butterknife.ButterKnife;public class MainActivity extends AppCompatActivity { @Bind(R.id.my_recycleView) RecyclerView myRecycleView; private MyRecycleViewAdapter mAdapter; private List mListData ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); initData(); initView(); } private void initView() { //设置显示方式 LinearLayoutManager llManager = new LinearLayoutManager(this); llManager.setOrientation(LinearLayoutManager.VERTICAL); myRecycleView.setLayoutManager(llManager); //设置Adapter mAdapter = new MyRecycleViewAdapter(); mAdapter.setListData(mListData); myRecycleView.setAdapter(mAdapter); } private void initData() { mListData = new ArrayList(); for(int i =1;i<15;i++){ mListData.add("这是第"+i+"个Item"); } }}
实现多个ViewType 自定义LayoutManager实现不同的显示方式 自定义ItemDecoration 以及RecycleView的相关注意问题
多数据显示之强大的RecycleView 使用完全解析(中级篇)
- 多数据显示之强大的RecycleView 使用完全解析(初级基础篇)
- 多数据显示之强大的RecycleView 使用完全解析(中级篇)
- RecycleView的基础使用
- RecycleView初级使用
- 强大的RecycleView
- RecycleView之 DiffUtil的使用
- 基础总结篇之四:Service完全解析--使用AIDL实现进程间的通信之复杂类型传递
- 基础总结篇之四:Service完全解析——使用AIDL实现进程间的通信
- 基础之初级菜单(带二级显示,可伸展)
- 强大的ORM之Realm基础使用总结
- Android 开发之RecycleView的简单使用
- 基础总结篇之四:Service完全解析
- 基础总结篇之四:Service完全解析
- Service---基础总结篇之四:Service完全解析 .
- 基础总结篇之四:Service完全解析
- 基础总结篇之四:Service完全解析
- 基础总结篇之四:Service完全解析
- 基础总结篇之四:Service完全解析
- const char **ptr 与 char *ptr[] 的释放问题的探究
- MySQL入门--显示指定数据表的字段结构、插入指定字段的值(记录)、查看指定表中指定字段的所有记录
- B/S之SQL注入
- HashMap和HashSet的区别
- 字典树典型应用(1247)
- 多数据显示之强大的RecycleView 使用完全解析(初级基础篇)
- lightoj 1421 - Wavio Sequence LIS变形
- Max Factor (hdu_2710) 素数筛选
- Linux源码环境下编译apk实践
- git如何更新fork的repository
- 多线程技术(三)
- java集合总结
- 《编程珠玑》第二章三个问题A---查找40亿个32位整数中缺失的某个整数
- 串的基础知识