zoukankan      html  css  js  c++  java
  • 自己定义适配器优化

    自己定义适配器优化

    简单原理

    ListView.setAdapter(adapter); 该方法用来设置listView的适配器,ListView通过我们自己定义的适配器中geiView()方法获取到每次装载的布局和数据文件。我们在设置每次展示的布局就是在getView()方法中设置的。由于每次加载布局都会通过LayoutInflater类来装载一次布局,如果我们的列表太多的话就会有产生很多View所以我们主要的就是优化我们的View对象在内存当中的产生数量。

    实现思路

    用一个盒子来装载每次我们创建View当我们下次需要的时候我们就直接获取就可以了。具体代码如下


    public class DiaryListAdapter extends BaseAdapter
    {
    private Context context;
    private List<Map<String, Object>> data;

    /*
    * context:上下文
    * data: 转载的数据源
    */

    public DiaryListAdapter(Context context, List<Map<String, Object>> data)
    {
    // TODO Auto-generated constructor stub
    this.context = context;
    this.data = data;
    }

    public void setData(List<Map<String, Object>> data)
    {
    this.data = data;
    }

    //获取所有装载数据的数量
    @Override
    public int getCount()
    {
    // TODO Auto-generated method stub
    return data == null ? 0 : data.size();
    }

    //获取指定位置的对象
    @Override
    public Object getItem(int position)
    {
    return data == null ? null : data.get(position);
    }
    //获取对象的Id
    @Override
    public long getItemId(int position)
    {
    return data == null ? 0 : Long.valueOf(data.get(position).get("_id").toString());
    }

    // 自己定义适配器
    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
    Map<String, Object> map = data.get(position);
    // 创建一个盒子
    myLoyout loyout = null;

    if (convertView == null)
    {
    convertView = LayoutInflater.from(context).inflate(R.layout.note_item, parent, false);

    //把布局保存起来。
    loyout = new myLoyout();
    loyout.contentTv = (TextView) convertView.findViewById(R.id.content_tv);
    loyout.titleTv = (TextView) convertView.findViewById(R.id.title_tv);
    //布局保存起来。避免二次加载在去FindViewId去寻找一次控件
    convertView.setTag(loyout);

    } else
    {
    //如果可以回收的的布局不为空
    loyout = (myLoyout) convertView.getTag();
    }


    loyout.contentTv .setText(map.get("title").toString());
    loyout.titleTv.setText(map.get("content").toString());
    return convertView;
    }

    // 定义一个包装适配器
    private class myLoyout
    {
    public TextView titleTv;
    public TextView contentTv;
    }
  • 相关阅读:
    Openstack Swift 添加和删除 custom metadata name,通过 libcurl
    Windows Error Reporting, Mini dump 2, Full dump 1
    英语邮件结尾时常用的20个句子
    QT 编译时 Warning: The name 'layoutWidget' (QWidget) is already in use, defaulting to 'layoutWidget1'.
    QVBoxLayout 不能移动
    学生管理系统
    使用python发送邮件
    ElasticSearch 基础 2
    ElasticSearch 基础 1
    Linux系统命令
  • 原文地址:https://www.cnblogs.com/ganwei/p/4774335.html
Copyright © 2011-2022 走看看