• 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
  • 微信公众号
您的位置:首页 > 程序设计 >Android > [Android学习]ListView显示多种item的处理办法

[Android学习]ListView显示多种item的处理办法

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

网友通过本文主要向大家介绍了[Android学习]ListView显示多种item的处理办法等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

[Android学习]ListView显示多种item的处理办法


在平常使用ListView的时候,通常我们使用的item的layout都是同一个。当需要有多个不同的item的layout时,有两中处理的办法。

第一种方法: 重写getView()方法

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
    int type=listDatas.get(position);
    switch(type)
    {
        case 1:
            convertView = inflater.inflate(R.layout.item1, null);
        break;
        case 2:
             convertView = inflater.inflate(R.layout.item2, null);
        break;
        ...
    }
    return convertView;
}

缺点:
无法重用convertView,每次都会重新创建新的view。在item数目非常多的时候,很容易会造成OOM和ListView滑动卡顿。

第二种方法: 其实Adapter和ListView早就为我们准备好处理这种情况的方法:getViewTypeCount(),getItemViewType()。getViewTypeCount():返回不同种item的数目,getItemViewType():返回的item类别的唯一标识,标识可以自己确定。
我们需要重写getViewTypeCount(),getItemViewType(),getView()方法。假设我们在偶数时显示item1,奇数时显示item2.

@Override
public int getViewTypeCount()
{
    return 2;
}
@Override
public int getItemViewType(int position)
{
    return position%2;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
    int type = getItemViewType(position);

    if(convertView==null)
    {
        switch(type)
        {
            case 0:
            convertView = inflater.inflate(R.layout.item1, null);
            break;
            case 1:
            convertView = inflater.inflate(R.layout.item2, null);
            break;
            default:
            convertView = inflater.inflate(R.layout.default_item, null);
            break;
        }
    }
    // 绑定数据
    switch(type)
    {
        case 0:
        ...
        break;
        case 1:
        ...
        break;
        default:
        ...
        break;
    }
    return convertView;
}

优点:
多个item的convertView会被重用。这种做法在其他地方也有很好的用处,比如,ListView的优化上,对于ListView的包含的item较大时,我们可以对item切片分块来加载,这样就需要显示多种item,正好就可以使用这种做法。

 </div>  </div>

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

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

相关文章

  • 2017-05-26android:descendantFocusability用法,
  • 2017-05-2653.Android Canvas Paint相关内容介绍
  • 2017-05-26android 使用AsyncHttpClient框架上传文件以及使用HttpURLConnection下载文件
  • 2017-05-26Android通过achartengine画折线图,achartengine折线图
  • 2017-05-26Android开发代码规范,android开发代码
  • 2017-05-26Android自定义控件
  • 2017-05-26我的android学习经历3,android学习经历3
  • 2017-05-26安卓GreenDao框架一些进阶用法整理,安卓greendao
  • 2017-05-26Android自定义控件
  • 2017-05-26Android窗口机制分析与UI管理系统,androidui

文章分类

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

最近更新的内容

    • 编译器开发系列--Ocelot语言5.表达式的有效性检查,--ocelot有效性
    • 一个帖子学会Android开发四大组件,android四大
    • 2.3.7 ProgressBar(进度条)
    • AndroidTV版(乐视超3 X55)root,将自己的软件设置为开机自启、系统软件,卸载系统应用等问题总结,androidtvx55
    • 2.5.4 AutoCompleteTextView(自动完成文本框)的基本使用
    • 一起来学习Android自定义控件
    • Android安全专项之Xposed劫持用户名密码实践
    • 安卓应用反编译(二)-APK包反编译浅析
    • MySQL rpl_semi_sync_master_timeout相关的一件BUG
    • Android开发: fragment解析及案例

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

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