RecyclerView的学习与使用一

一:首先当然要添加依赖项,添加的项是com.android.support:recyclerview-v7:25.1,填加方法就不说了。

二:接下来修改布局,创建此部件。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"

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

    </android.support.v7.widget.RecyclerView>
</RelativeLayout>

三,要使用RecyclerView,必须使用到几个重要的子类
1.ViewHolder:从名字上就能看出来它只做一件事:容纳View视图,它的任务就是这么简单。
首先创建一个内部类,继承自RecyclerView.ViewHolder。

private  class  MyHolder extends RecyclerView.ViewHolder{
        private TextView tv;

        public MyHolder(View itemView) {
            super(itemView);
            tv = (TextView) itemView;
        }
    }

这里的构造函数中的View就是容器视图,可以理解为每一行的视图。如果是自定义的视图,你可以在这里对所有容器中的视图进行初始化。

2.Adapter :RecyclerView自己不创建ViewHolder。这个任务实际是由adapter来完成的。adapter是个控制器对象,从模型层获取数据,然后提供给RecyclerView显示,起到了沟通的桥梁作用。

所以说,总结起来adapter负责:
 创建必要的ViewHolder;
 绑定ViewHolder至模型层数据。

要创建adapter,首先要定义RecyclerView.Adapter子类,RecyclerView需要显示视图对象时,就会去找它的adapter。

private  class MyAdapter extends RecyclerView.Adapter<MyHolder>{

        private  List<String> mStrings;

        public MyAdapter(List<String> strings) {
            mStrings = strings;

        }

        @Override
        public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            LayoutInflater layoutInflate = LayoutInflater.from(MainActivity.this);
            View view =         layoutInflate.inflate(android.R.layout.simple_list_item_1,parent,false);
            MyHolder holder = new MyHolder(view);

            return holder;
        }

        @Override
        public void onBindViewHolder(MyHolder holder, int position) {
            holder.tv.setText(mStrings.get(position));

        }

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

1)onCreateViewHolder()
RecyclerView需要新的View视图来显示列表项时,会调用onCreateViewHolder方法。在
这个方法内部,我们创建View视图,然后封装到ViewHolder中。此时,RecyclerView并不要求
封装视图装载数据。
为得到View视图,我们实例化了Android标准库中名为simple_list_item_1的布局。该布局定义
了美观的TextView视图,主要用于列表项的展示。

2)onBindViewHolder(MyHolder holder, int position)
接下来要说的是onBindViewHolder方法。该方法会把ViewHolder的View视图和模型层数据绑定起来。收到ViewHolder和列表项在数据集中的索引位置后,我们通过索引位置找到要显示的数据进行绑定。绑定完毕,刷新显示View视图。

所谓索引位置,实际上就是数组中Crime的位置。取出目标数据后,通过发送crime标题给
ViewHolder的TextView视图,我们就完成了Crime数据和View视图的绑定。

3)getItemCount()
只需要返回列表项的数目。

四:创建RecyclerView并且设置Adapter

        mAdapter = new MyAdapter(mStrings);
        mRecyclerView.setAdapter(mAdapter);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));

注意,没有LayoutManager的支持,不仅RecyclerView无法工作,还会导致应用崩溃。所
以,RecyclerView视图创建完成后,就立即转交给了LayoutManager对象。RecyclerView类的任务就是回收再利用以及定位屏幕上的TextView视图。实际上,定位的任务被委托给了LayoutManager。除了在屏幕上定位列表项,LayoutManager还负责定义屏幕滚动行为。因此,没有LayoutManager,RecyclerView也就没法正常工作了。LinearLayoutManager(this)说明是一个线性布局。

贴出完整代码

package com.example.chenjiongs.mytest;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private RecyclerView mRecyclerView;
    private List<String > mStrings;
    private MyAdapter mAdapter;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initString();
        initViews();
        mAdapter = new MyAdapter(mStrings);
        mRecyclerView.setAdapter(mAdapter);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
    }


    private  class  MyHolder extends RecyclerView.ViewHolder{
        private TextView tv;

        public MyHolder(View itemView) {
            super(itemView);
            tv = (TextView) itemView;
        }
    }

    private  class MyAdapter extends RecyclerView.Adapter<MyHolder>{

        private  List<String> mStrings;

        public MyAdapter(List<String> strings) {
            mStrings = strings;

        }

        @Override
        public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            LayoutInflater layoutInflate = LayoutInflater.from(MainActivity.this);
            View view = layoutInflate.inflate(android.R.layout.simple_list_item_1,parent,false);
            MyHolder holder = new MyHolder(view);

            return holder;
        }

        @Override
        public void onBindViewHolder(MyHolder holder, int position) {
            holder.tv.setText(mStrings.get(position));

        }

        @Override
        public int getItemCount() {
            return mStrings.size();
        }
    }
    private void initViews() {
        mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);

    }



    private void initString() {
        mStrings = new ArrayList<>();
        for(int i=0;i<100;i++){
            mStrings.add(""+i);
        }
    }
}

效果图这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值