View相关面试问题-ListView缓存面试问题讲解

什么是ListView:

ListView就是一个能数据集合以动态滚动的方式显示在用户界面上的View。

ListView适配器模式:


有了Adapter可以将数据源与view进行分离~

ListView的recycleBin机制:

对于列表可能会有成千上万条数据,那ListView是如何可以做到不oom呢?这就需要了解它的recycleBin机制了,下面从源码来分析一下:

recycleBin存在于它的父类中,如下:

其中它里面有三个重要的成员变量,如下:



接下来看一下比较重要的方法:

下面用图来表述一下:

ListView的优化:

  • convertview重用 / viewHolder
    class MyAdapter extends BaseAdapter {
            private Context context;
    
            public MyAdapter(Context context) {
                this.context = context;
            }
    
            @Override
            public int getCount() {
                return 0;
            }
    
            @Override
            public Object getItem(int position) {
                return null;
            }
    
            @Override
            public long getItemId(int position) {
                return 0;
            }
    
            class ViewHolder {
                public ImageView img;
                public TextView title;
                public TextView info;
            }
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                ViewHolder holder;
                if (convertView == null) {
                    holder = new ViewHolder();
                    convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.list_item, null);
                    holder.img = (ImageView) convertView.findViewById(R.id.img);
                    holder.title = (TextView) convertView.findViewById(R.id.title);
                    holder.info = (TextView) convertView.findViewById(R.id.info);
                    convertView.setTag(holder);
                } else {
                    holder = (ViewHolder) convertView.getTag();
                }
                holder.title.setText("Hello");
                holder.info.setText("World");
                return convertView;
            }
    
    
        }
  • 三级缓存 / 滑动监听

posted on 2018-05-04 14:01  cexo  阅读(134)  评论(0编辑  收藏  举报

导航