• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > ListView Adapter优化 实例

ListView Adapter优化 实例

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了listview adapter,treelistviewadapter,listview baseadapter,listview.getadapter,listview设置adapter等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

    private String[] mArrData;
    private ListView listView;
    private AsyncImageLoader asyncImageLoader;
    private final LayoutInflater inflater;

    public listviewAdapterDemo1(String[] mArrData, Context mContext, ListView listView) {
        this.mArrData = mArrData;
        this.listView = listView;
        asyncImageLoader = new AsyncImageLoader();
        inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        return this.mArrData.length;
    }

    @Override
    public Object getItem(int arg0) {
        return mArrData[arg0];
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    /***
     * 1.控件对象内存为一个
     * 2.view对象只会创建可视对象次数(有的是8次)根据屏幕可视listview的数量而定,在加载超过可视postion数据时不会重新创建
     *   但是需要每次重新加载数据
     *  
     *   从节省内存的角度出发,这种更合理,毕竟加载数据不需要占用内存
     */
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder viewholder;
        Log.d("dd", "Position:" + position+"------");
        if (convertView == null) {
            Log.d("dd", "Position:" + position);
            convertView = inflater.inflate(R.layout.list_item_icon_text, null);
            viewholder = new ViewHolder();
            viewholder.icon = (ImageView) convertView.findViewById(R.id.icon);
            viewholder.text = (TextView) convertView.findViewById(R.id.text);

            convertView.setTag(viewholder);
        } else {
            viewholder = (ViewHolder) convertView.getTag();
        }

        viewholder.text.setText(mArrData[position]);
        // Load the image and set it on the ImageView
        String imageUrl = "";
        viewholder.icon.setTag(imageUrl);
        Drawable cachedImage = asyncImageLoader.loadDrawable(imageUrl, new ImageCallback() {

            public void imageLoaded(Drawable imageDrawable, String imageUrl) {
                ImageView imageViewByTag = (ImageView) listView.findViewWithTag(imageUrl);
                if (imageViewByTag != null) {
                    imageViewByTag.setImageDrawable(imageDrawable);
                }
            }
        });
        if (cachedImage != null)//说明是从缓存池中得到
            viewholder.icon.setImageDrawable(cachedImage);

        return convertView;
    }

    static class ViewHolder {
        ImageView icon;
        TextView text;
    }
}
</div>


在listview中的getview方法中也可以这样用这个方法:

    private String[] mArrData;
    private ListView listView;
    private AsyncImageLoader asyncImageLoader;
    private final LayoutInflater inflater;
    private Map<Integer, View> viewMap = new HashMap<Integer, View>();

    public listviewAdapterDemo2(String[] mArrData, Context mContext, ListView listView) {
        this.mArrData = mArrData;
        this.listView = listView;
        asyncImageLoader = new AsyncImageLoader();
        inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        return this.mArrData.length;
    }

    @Override
    public Object getItem(int arg0) {
        return mArrData[arg0];
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    /**
     * 1.控件对象内存为一个
     * 2.每一个postion对应一个view,且不管前进后退,每个postion数据只加载一次   * 但是从节省内容的角度出发,方案一更节省内存
     */
    @Override
    public View getView(int position, View convertVi

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • ListView Adapter优化 实例

相关文章

  • 2017-05-28C#基础 延迟加载介绍与实例
  • 2017-05-28WPF仿三星手机充电界面实现代码
  • 2017-05-28C#中常量和只读变量的区别小结
  • 2017-05-28C++中const的实现细节介绍(C,C#同理)
  • 2017-05-28C#自定义函数NetxtString生成随机字符串
  • 2017-05-28C#读写文本文件的方法
  • 2017-05-28C# 全角和半角转换以及判断的简单代码
  • 2017-05-28LZW数据压缩算法的原理分析
  • 2017-05-28C#实现的json序列化和反序列化代码实例
  • 2017-05-28C#编程实现DataTable添加行的方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 解决C# X64应用程序中读取WParam溢出的问题
    • C#执行Javascript代码的几种方法总结
    • C#中按指定质量保存图片的实例代码
    • 深入解析:打造自动消失的对话框
    • C#实现百分比转小数的方法
    • 解析.NET中几种Timer的使用
    • C#实现将程序锁定到Win7任务栏的方法
    • Windows中使用C#为文件夹和文件编写密码锁的示例分享
    • 浅谈C#网络编程详解篇
    • C#中TreeView实现适合两级节点的选中节点方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有