zoukankan      html  css  js  c++  java
  • 组件RecyclerView的应用(一)

    首先我们知道RecyclerView组件是ListView的升级版,今天先介绍基础的RecyclerView的基本布局RecyclerView.Adapter和LayoutManager

    第一:

    LayoutManager

    我们知道ListView只能在垂直方向上滚动,Android API没有提供ListView在水平方向上面滚动的支持。或许有多种方式实现水平滑动,ListView并不是设计来做这件事情的。但是RecyclerView相较于ListView,在滚动上面的功能扩展了许多。它可以支持多种类型列表的展示要求,主要如下:

    LinearLayoutManager ,可以支持水平和竖直方向上滚动的列表。

    StaggeredGridLayoutManager ,可以支持交叉网格风格的列表,类似于瀑布流或者Pinterest。

    GridLayoutManager ,支持网格展示,可以水平或者竖直滚动,如展示图片的画廊。

    因此RecyclerView相对于ListView来说自定义性扩展了很多

    第二:

    RecyclerView.Adapter和ListView的BaseAdapter不同之处在于:BaseAdapter都是在getView一个方法中实现的,包括View的实例化以及组件的绑定。在RecyclerView.Adapter中,则提供了RecyclerView.ViewHolder机制,这个类必须我们自己定义,主要是用来保存视图的类,主要在onCreateViewHolder中实现View的保存

    public static class ViewHolder extends RecyclerView.ViewHolder
    {
    public TextView itemText;
    public ViewHolder(View itemView) {
    super(itemView);
    itemText = (TextView)findViewById(R.id.item_text);
    }
    }
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = layoutInflater.inflate(R.layout.item_recyclerview,parent,false);
    return new ViewHolder(view);
    }
    另外还需要实现getCount()方法,也就是返回item的数量,另外 onBindViewHolder()方法实现对应的组件和数据绑定
    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    ((ViewHolder)holder).itemText.setText(titleList.get(position));
    }

    以下为我写的基本实现RecyclerView功能的一段小代码
    /**
    适配器类
    **/

    public class RecyclerAdapter extends RecyclerView.Adapter {
        private List<String> titleList;
        private LayoutInflater layoutInflater;
        public RecyclerAdapter(Context context)
        {
            this.titleList = new ArrayList<>();
            for(int i=0;i<30;i++)
            {
                titleList.add("item"+i);
            }
            layoutInflater = LayoutInflater.from(context);
        }
        @Override
        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = layoutInflater.inflate(R.layout.item_recyclerview,parent,false);
            return new ViewHolder(view);
        }
    
        @Override
        public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
            ((ViewHolder)holder).itemText.setText(titleList.get(position));
        }
    
        @Override
        public int getItemCount() {
            return titleList.size();
        }
        public static class ViewHolder extends RecyclerView.ViewHolder
        {
            //public TextView itemText;
            public ViewHolder(View itemView) {
                super(itemView);
            }
        }
    }
    

    /**

    主界面代码  

    **/

            mRecyclerView = (RecyclerView)pageList.get(SPORT).findViewById(R.id.recyclerview);
            mRecyclerView.setHasFixedSize(true);
            mLinearLayoutManager = new LinearLayoutManager(this);
            mLinearLayoutManager.setOrientation(OrientationHelper.VERTICAL);
            RecyclerAdapter mRecyclerAdapter = new RecyclerAdapter(this);
            mRecyclerView.setLayoutManager(mLinearLayoutManager);
            mRecyclerView.setAdapter(mRecyclerAdapter);
    

      注:pageList.get(SPORT)为自己定义的一个实例化view,读者可以根据自己需要定制不同的xml文件并将其实例化为view

  • 相关阅读:
    【Git&GitHub idea中使用Git 03】
    【Git&GitHub 本地库和远程库交互 02】
    【Git&GitHub 本地库操作 01】
    C Primer Plus学习笔记【11章节】
    Python包,模块理解,以及通过元类自动化注册属性。
    pandas.DataFrame.from_dict的使用介绍
    C Primer Plus学习笔记 第10章 编程练习
    CMOS与BIOS的区别(转帖)
    Python 元类详解 __new__、__init__、__call__[补充说明]
    Python 元类详解 __new__、__init__、__call__[收官之作]
  • 原文地址:https://www.cnblogs.com/Cc1231/p/5316813.html
Copyright © 2011-2022 走看看