RecyclerView简单理解

网络上关于RecyclerView的文章可以说是数不胜数。但都大同小异。看着他们简直脑袋一团乱糊。
我在这里就说下我的个人理解,菜鸟才能和菜鸟有共同语言,不是吗?

你要想使用它需要:

  • 在主要布局里声明一个RecyclerView控件。
  • 继承自 RecyclerView.Adapter 的布局管理器。
  • 约束内容的布局文件。
  • 加载它。

第3,4个暂且抛到一边去。你会发现前2个是不是跟我们最开始学的android四大控件之一的activity很相像?
activity是一个布局文件 和 控制这个布局文件的类
RecyclerView是一个布局控件 和 控制(加载)这个控件的类(容器)

这里倒过来说,先从最后一个步骤说起:

加载一个activity通过Intent:

Intent intent = new Intent(this,需要加载的类)  //找到需要加载的类
startActivity(intent) //启动

再来看下RecyclerView如何加载它:

recyclerView = (RecyclerView) findViewById(R.id.recyclerView);  //找到要加载的控件
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(SearchActivity.this);  //创建一个列表布局
recyclerView.setLayoutManager(layoutManager);  //设置布局为上面创建的布局
recyclerView.setAdapter(new MyAdapter(null));  //启动(加载自己的布局管理器,一般null为传入的数据)

现在说说第二个,如何创建一个自己的Adapter:

public class MyAdapter extends RecyclerView.Adapter {
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return null;
    }
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {

    }
    @Override
    public int getItemCount() {
        return 0;
    }
}

1.1这是继承自 RecyclerView.Adapter必须要写的三个:

  • onCreateViewHolder 在这个步骤里一般 是 绑定内容布局文件与点击
  • onBindViewHolder 这里就是 把数据与布局绑定
  • getItemCount 这是长度,一般返回你传入的数据的长度

上面一再说数据,而这个我们传入的数据从哪儿传入?一个构造方法搞定。

List<String> mList;
public SearchSuggestionsAdapter(List<String> mList) {
        this.mList = mList;
}

还有一个将 内容布局内的控件赋值:

static class MyHolder extends RecyclerView.ViewHolder {
     TextView textView; 
    public MyHolder(View itemView) {
        super(itemView);
        textView = itemView.findViewbyId(R.id.textview);
    }
}

并把MyHolder指定为 RecyclerView.Adapter的泛型:

public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {

那必须要写的三个方法(1.1)需要更改,你可以直接把那三个删掉,再使用AndroidStudio的Alt+Enter自动补全。

以下是最简单的一种

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyHolder> {
    List<String> mList;
    public MyAdapter(List<String> mList){
        this.mList = mList;
    }

    @Override
    public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.textView_item,parent,false);
        return new MyHolder(view);
    }

    @Override
    public void onBindViewHolder(MyHolder holder, int position) {
        holder.textView.setText(mList.get(position));
    }

    @Override
    public int getItemCount() {
        if (!mList.isEmpty())return mList.size();
        return 0;
    }

    static class MyHolder extends RecyclerView.ViewHolder {
        TextView textView;
        public MyHolder(View itemView) {
            super(itemView);
            textView = itemView.findViewById(R.id.textView);
        }
    }
}

实在看不懂的话就跟着一个字一个字得敲。但是不要复制粘贴。敲个几百行自然而然的就懂了。

    原文作者:u5510
    原文地址: https://www.jianshu.com/p/cd19c3796580
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞