RecyclerView从入门到入神——初识RecyclerView(一)

何为RecyclerView

RecyclerView是 com.android.support:v7 包下的一个小部件,是一个用于显示庞大数据集的容器,可取代ListViewGridView

RecyclerView优势

  1. 比 ListView 更高级且更具灵活性

可通过指定布局管理器LayoutManager,极其方便的切换ReyclerView展现形式

  1. 更流畅的UI滑动

RecyclerView的Adapter默认要求使用ViewHolder,避免在视图复用时的重复inflate() 和 findViewById() 耗时操作

布局管理器 LayoutManager

RecyclerView 提供三种内置布局管理器:

1 LinearLayoutManager 列表显示

RecyclerView从入门到入神——初识RecyclerView(一)_第1张图片
recylerview01.png

2 GridLayoutManager 网格显示

RecyclerView从入门到入神——初识RecyclerView(一)_第2张图片
recylerview02.png

3 StaggeredGridLayoutManager 分散对齐网格(瀑布流)

RecyclerView从入门到入神——初识RecyclerView(一)_第3张图片
recylerview03.png

以上三种布局管理器均可以 垂直或水平滚动!

可继承 RecyclerView.LayoutManager 创建一个自定义布局管理器

如何接入

添加依赖项

dependencies {
    ...
    compile 'com.android.support:appcompat-v7:24.2.0'
}

示例

布局文件加入


Activity

public class MainActivity extends AppCompatActivity {

    private RecyclerView mRecyclerView;
    private RecyclerView.LayoutManager mLayoutManager;
    private int mSpanCount = 3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
        //RecyclerView.HORIZONTAL,一个竖着滑一个横着滑
        int orientation = RecyclerView.VERTICAL;
        //列表显示,最后一个参数如果为true,列表将倒叙显示
        mLayoutManager = new LinearLayoutManager(this, orientation, false);
        //网格显示
        mLayoutManager = new GridLayoutManager(this, mSpanCount, orientation, false);
        //分散对齐网格(瀑布流),如果每个item的宽高都固定一致,则和网格显示无差别
        mLayoutManager = new StaggeredGridLayoutManager(mSpanCount, orientation);
        //为 RecyclerView 指定布局管理器
        mRecyclerView.setLayoutManager(mLayoutManager);
        DemoAdapter adapter = new DemoAdapter();
        adapter.setDatas(constructTestDatas());
        mRecyclerView.setAdapter(adapter);
    }

    private List constructTestDatas() {
        List datas = new ArrayList<>();
        datas.add("刘一");
        datas.add("陈二");
        datas.add("张三");
        datas.add("李四");
        datas.add("王五");
        datas.add("赵六");
        datas.add("孙七");
        datas.add("周八");
        datas.add("吴九");
        datas.add("郑十");
        return datas;
    }
}

Adapter

public class DemoAdapter extends RecyclerView.Adapter {

    private final String TAG = getClass().getSimpleName();
    private List mDatas;

    public DemoAdapter() {
    }

    class ViewHolder extends RecyclerView.ViewHolder {
        TextView mTextView;

        ViewHolder(View v) {
            super(v);
            mTextView = (TextView) v.findViewById(R.id.item_title);
        }
    }

    public void setDatas(List datas) {
        mDatas = datas;
        notifyDataSetChanged();
    }

    // 创建视图
    @Override
    public DemoAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        Log.d(TAG, "onCreateViewHolder()");
        View v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.layout_recyclerview_item_view, parent, false);
        return new ViewHolder(v);
    }

    // 为Item绑定数据
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        Log.d(TAG, "onBindViewHolder" + "(" + position + ")");
        holder.mTextView.setText(mDatas.get(position));
    }

    @Override
    public int getItemCount() {
        return mDatas.size();
    }
}

总结

本篇是RecyclerView的入门篇,主要讲解了什么是RecyclerView,RecyclerView的优势以及三种布局管理器的区别,并以Example展示了如何使用RecyclerView。

下一篇

RecyclerView从入门到入神——为RecyclerView添加HeaderView 和 FooterView(二)

欢迎关注我的微信公众号(Android埋坑的艺术),一手新鲜,不容错过

RecyclerView从入门到入神——初识RecyclerView(一)_第4张图片
qrcode_xp.jpg

你可能感兴趣的:(RecyclerView从入门到入神——初识RecyclerView(一))