`
liu86th
  • 浏览: 119269 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

[转]技巧和设计模式 --- Adapter实用技巧

 
阅读更多

 如何使用Adapter

 

Adapter是ListView和数据源之间的中间人,有如下的特点:

 

[1] 当每条数据进入可见区时,Adapter的getView()会被调用,然后返回代表具体数据的视图

 

[2] 触摸滚动时,频繁调用

 

[3] 支持成百上千条数据

 

装载数据视图比较:

 

Adapter显示的每条数据的XML布局文件

 

 

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal">
    <ImageView android:id="@+id/icon"
    android:layout_width="48dip"
    android:layout_height="48dip" />
    <TextView android:id="@+id/text"
    android:layout_gravity="center_vertical"
    android:layout_width="0dip"
    android:layout_weight="1.0"
    android:layout_height="wrap_content" />
</LinearLayout>
 

 

[1] 最简单而最不实用和最慢的方法

 

 

public View getView(int pos, View convertView,
ViewGroup parent){
    View item = mInflater.inflate(R.layout.list_item, null);
    ((TextView) item.findViewById(R.id.text)).
    setText(DATA[pos]);
    ((ImageView) item.findViewButId(R.id.icon)).
    setImageBitmap((pos & 1) == 1 ? mIcon1 : mIcon2);
    return item;
}

 

 

[2] 利用convertView回收视图, 效率提高 200% 

 

 

public View getView(int pos, View convertView,
ViewGroup parent){
    if (convertView == null) {
        convertView = mInflater.inflate(
        R.layout.list_item, null);
    }
    ((TextView) convertView.findViewById(R.id.text)).
    setText(DATA[pos]);
    ((ImageView) convertView.findViewButId(R.id.icon)).
    setImageBitmap((pos & 1) == 1 ? mIcon1 : mIcon2);
    return convertView;
}

 

 

[3] 使用ViewHolder模式,效率再提高50%

 

 

static class ViewHolder {
   TextView text;
   ImageView icon;
}

 

 

 public View getView(int pos, View convertView, ViewGroup parent){ViewHolder holder;
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.list_item, null);
        holder = new ViewHolder();
        holder.text = (TextView) convertView.findViewById(
        R.id.text));
        holder.icon = (ImageView) convertView.findViewButId(
        R.id.icon));
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }
    holder.text.setText(DATA[pos]);
    holder.icon.setImageBitmap((pos & 1) == 1 ? mIcon1 : mIcon2);
    return convertView;
}

 

效率对比

 


  • 大小: 22.5 KB
  • 大小: 23.1 KB
分享到:
评论

相关推荐

    设计模式:可复用面向对象软件的基础--详细书签版

     设计模式并不要求使用独特的语言特性,也不采用那些足以使你的朋友或老板大吃一惊的神奇的编程技巧。所有的模式均可以用标准的面向对象语言实现,这也许有时会比特殊的解法多费一些功夫,但是为了增加软件的灵活性...

    c++设计模式GoF23

    设计模式不仅仅是编程技巧的集合,更是开发者思想的体现。 #### 1. 创建型模式 - **Factory 模式**:此模式提供了一个创建对象的接口,但允许子类决定实例化哪一个类。它将实例化推迟到子类。这种模式在实际项目中...

    headfirst设计模式

    《Head First设计模式》是一本深受开发者欢迎的设计模式教程,以其独特的视觉呈现方式和易于理解的语言,让初学者也能快速掌握设计模式的核心概念。这本书深入浅出地介绍了23种GOF(GoF,Gamma、Erich、Johnson、...

    设计模式 GOF 23

    设计模式并不要求使用独特的语言特性,也不采用那些足以使你的朋友或老板大吃一惊的神奇的编程技巧。所有的模式均可以用标准的面向对象语言实现,这也许有时会比特殊的解法多费一些功夫,但是为了增加软件的灵活性...

    设计模式杂谈

    读者可以期待深入的源码分析、示例代码和实用技巧,帮助他们在自己的项目中更好地应用这些模式。总的来说,理解和熟练运用设计模式是每个专业IT人士的必备技能之一,它对于提升个人专业素养和推动项目成功起着关键...

    设计模式新解23招,招招新鲜

    - **个人感悟与思考**:分享作者在学习和实践中对设计模式的理解和思考,包括设计模式的价值、应用技巧等。 #### 结论 本书通过详细的解释和示例,不仅帮助读者理解23种经典设计模式的核心思想,而且还通过具体的...

    Python的设计模式学习案例

    本资源包“设计模式_27”可能是包含27个不同设计模式的案例集合,每个模式都是Python编程中的一种实用技巧。 设计模式分为三类:创建型、结构型和行为型模式。每种类型都针对软件设计的不同方面: 1. **创建型模式...

    Android Head First 设计模式高清版本

    根据提供的文件信息,...通过本书的学习,不仅可以掌握各种设计模式的理论知识,还能了解到它们在实际项目中的应用案例,从而提升自己的编程技巧和设计能力。希望每位读者都能从中受益,成为更出色的Android开发者。

    Head First 设计模式(中文版)

    总结来说,《Head First 设计模式》中文版是一本实用且有趣的教材,它将带你走进设计模式的世界,让你了解如何有效地重用代码,提高软件的可维护性和可扩展性。配合提供的Java源码,你可以亲自实践每一个模式,从而...

    常见的23个设计模式详解

    《常见的23个设计模式详解》一书深入探讨了软件工程领域中最为广泛接受和应用的设计模式,旨在帮助不同层次的开发人员、系统分析师及架构师掌握这些模式的核心概念与实践技巧。本书不仅覆盖了从初级到高级的技术细节...

    Spring 5 Design Patterns.pdf

    除了上述几种模式外,《Spring 5 设计模式》还介绍了更多实用的设计模式,包括但不限于: - **工厂模式(Factory)**:用于创建对象的接口,但让子类决定实例化哪个类。 - **装饰者模式(Decorator)**:动态地给一...

    Java设计模式

    《Java设计模式》这本书面向不同层次的读者群体:初级coder可以通过学习这些模式来提升自己的编码技巧;高级程序员则可以更深入地了解各种设计模式及其在Java中的应用;而对于系统分析师而言,本书提供了许多实用的...

    设计模式逐个解析.chm,C#代码

    通过阅读本书,开发者不仅可以掌握设计模式的理论知识,还能获得实用的编程技巧,从而在软件设计中更加游刃有余,提高代码的可读性和可维护性。无论是初学者还是有经验的程序员,都能从中受益匪浅。

    使用adapter实现listview的多种功能

    本教程将详细讲解如何使用Adapter来实现ListView的多种功能,这对于初学者来说是非常实用的知识点。 首先,我们来理解ListView的基本概念。ListView是Android提供的一个视图容器,它可以滚动显示多个行项目,每一行...

    Android Ap 开发 设计模式第一篇:迭代器模式

    在Android应用开发中,设计模式是一种重要的编程技巧,它能够帮助开发者解决常见问题,提高代码的可读性、可维护性和可复用性。本文将深入探讨设计模式中的迭代器模式,这是一种在Android APK开发中非常实用的模式,...

    GridView实用技巧

    以上是GridView的一些基本使用和进阶技巧,实践中还可以结合其他控件和设计模式,如SwipeRefreshLayout(下拉刷新)、LoadMore(上拉加载)等,以实现更加丰富的功能和用户体验。通过学习和实践这些技巧,你将能够更...

    ccidnet网站编程技术专题实用文档

    综上所述,《ccidnet网站编程技术专题实用文档》是一份全面的编程技术参考资料,无论你是Java开发者还是C++程序员,都能从中学习到设计模式的精髓和实际应用技巧,进一步提升编程能力。同时,它还提供了对当前IT技术...

    android 开发技巧总汇

    在Android开发领域,掌握一些实用的技巧和方法可以极大地提高开发效率和代码质量。下面将对标题和描述中提到的几个关键知识点进行详尽的解释和拓展。 1. **如何实现一个提示** 在Android中,提示用户通常有两种...

Global site tag (gtag.js) - Google Analytics