列表组件之ListView

Posted CSU迦叶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了列表组件之ListView相关的知识,希望对你有一定的参考价值。

1.ListView是什么

  • 一个显示可滚动项目的视图组件
  • 系统使用Adapter(适配器)将列表项目插入列表
  • 适配器从来源提取内容
    下图从MVC分析的话,ListView相当于View,Adapter相当于Controller,data相当于Model
    在这里插入图片描述
    缺点:屏幕里面只能展示有限个ItemView,却将全部的都加载出来了,十分占用内存

2.Adapter
系统有封装了一些,但是企业中并不常用
一般自定义Adapet,需要继承BaseAdapter,重写以下四个方法
在这里插入图片描述
getCount:要展示多少个view
getItem:处于某个位置,得到的数据是什么
getItemId:处于某个位置,数据对应的id是什么
getView:滑到某个位置,view长什么样子

重点是getView方法,position当前view的位置,convertView要被转换出来的view,判断缓存池里面是否为空,如果为空,创建一个ViewHolder,将convertView渲染出来(inflate相当于new出来),再对viewHolder的子控件进行赋值,最后通过setTag将viewHolder和convertView关联。

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        if (convertView == null) {
            holder = new ViewHolder();
            convertView = View.inflate(parent.getContext(), R.layout.number_list_item, null);
            holder.listItemNumberView = (TextView) convertView.findViewById(R.id.tv_item_number);
            holder.viewHolderIndex = (TextView) convertView.findViewById(R.id.tv_view_holder_instance);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }



        holder.listItemNumberView.setText(String.valueOf(position));
        holder.viewHolderIndex.setText(String.format("ViewHolder index: %s", position));
        int backgroundColorForViewHolder = ColorUtils.
                getViewHolderBackgroundColorFromInstance(convertView.getContext(), position % 10);
        convertView.setBackgroundColor(backgroundColorForViewHolder);
        return convertView;
    }

在这里插入图片描述
如果没有viewHolder,以下代码每次都要再写一遍

(TextView) convertView.findViewById(R.id.tv_item_number);
(TextView) convertView.findViewById(R.id.tv_view_holder_instance);

而findViewById是一个耗时的工作

以上是关于列表组件之ListView的主要内容,如果未能解决你的问题,请参考以下文章

片段中的ListView不显示

在片段android中创建listview

方向/配置更改后如何维护 ListView 片段状态?

listview OnItemClick 侦听器在片段中不起作用

不要在片段中显示列表视图项

返回片段后ListView为空