美文网首页RecyclerViewRecyclerViewandroid
RecyclerView从入门到入神——初识RecyclerVi

RecyclerView从入门到入神——初识RecyclerVi

作者: Android埋坑的艺术 | 来源:发表于2017-01-19 09:58 被阅读273次

    何为RecyclerView

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

    RecyclerView优势

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

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

    1. 更流畅的UI滑动

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

    布局管理器 LayoutManager

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

    1 LinearLayoutManager 列表显示

    recylerview01.png

    2 GridLayoutManager 网格显示

    recylerview02.png

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

    recylerview03.png

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

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

    如何接入

    添加依赖项

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

    示例

    布局文件加入

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    

    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<String> constructTestDatas() {
            List<String> 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<DemoAdapter.ViewHolder> {
    
        private final String TAG = getClass().getSimpleName();
        private List<String> 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<String> 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埋坑的艺术),一手新鲜,不容错过

    qrcode_xp.jpg

    相关文章

      网友评论

        本文标题:RecyclerView从入门到入神——初识RecyclerVi

        本文链接:https://www.haomeiwen.com/subject/qrfibttx.html