RecyclerView简单理解

作者: u5510 | 来源:发表于2017-07-24 11:58 被阅读0次

    网络上关于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);
            }
        }
    }
    

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

    相关文章

      网友评论

        本文标题:RecyclerView简单理解

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