`
dyingbleed
  • 浏览: 117270 次
  • 性别: Icon_minigender_1
  • 来自: 东莞
社区版块
存档分类
最新评论

【Android】高效ListView

阅读更多

在实际开发过程中,为了定制ListView项内容,通常所使用的方式是,创建所需要Adapter的子类,并重写getView()方法。

getView()方法接受一个名为convertView,View类型的参数。

如果convertView为null,就需要创建一个新的View对象;如果convertView非null,它实际上是之前使用过的View对象。

事实上,Android试图循环使用那些scroll到列表边界外的View。

 

另一个消耗CPU的方法是findViewById()。

所有继承自View的子类都有getTab()方法和setTab()方法,这样我们就可以通过设置“tab”关联任何对象到该View。

使用Holder模式,仅需调用一次findViewById()方法,让“tag”持有该View的子Widget,在每次使用该View时,就可以直接访问这些子Widget,而无需重复调用了。

 

示例代码:

 

创建一个ListActivity显示ListView

 

package lizhen.listview;

import android.app.ListActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;

public class Main extends ListActivity {
	
	private String[] data = {"A", "N", "D", "R", "O", "I", "D", "G", "O", "O", "G", "L", "E"};
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        setListAdapter(new MyAdapter(this, data));
    }
    
    private class MyAdapter extends BaseAdapter {
    	
    	private final Context context;
    	private final String[] data;
    	
    	public MyAdapter(Context context, String[] data) {
    		this.context = context;
    		this.data = data;
    	}

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

		@Override
		public Object getItem(int position) {
			return data[position];
		}

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

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			Holder holder = null;
			if(convertView == null) {
				convertView = getLayoutInflater().inflate(R.layout.item, parent, false);
				holder = new Holder(convertView);
				convertView.setTag(holder);
			} else {
				holder = (Holder) convertView.getTag();
			}
			holder.getIcon().setImageResource(R.drawable.icon);
			holder.getLabel().setText(data[position]);
			return convertView;
		}
    	
    }
}

 

 

创建自定义类Holder,用于持有列表项的子Widget

 

package lizhen.listview;

import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

public class Holder {
	
	private View parentView;
	private ImageView iconImageView;
	private TextView labelTextView;
	
	public Holder(View view) {
		this.parentView = view;
	}
	
	public ImageView getIcon() {
		if(iconImageView == null) {
			iconImageView = (ImageView) parentView.findViewById(R.id.icon);
		}
		return iconImageView;
	}
	
	public TextView getLabel() {
		if(labelTextView == null) {
			labelTextView = (TextView) parentView.findViewById(R.id.label);
		}
		return labelTextView;
	}
}

 

 

运行结果:

运行结果

 

 

  • 大小: 31.8 KB
分享到:
评论
1 楼 guoxingjun5251223 2011-09-22  
不错!

相关推荐

    Android listview自动换行

    在Android开发中,ListView是一种非常常见的控件,用于展示大量数据列表。它的高效性和可滚动性使得它在显示数据集合时十分有用。然而,当ListView的子项(item)宽度超过屏幕宽度时,如何实现自动换行就成了一个...

    Android中ListView表头表尾

    在Android开发中,ListView是一种非常常见的控件,用于展示大量数据列表。它的高效性和可滚动性使得它在处理数据展示时十分有用。本教程将详细讲解如何在Android中使用ListView,特别是添加表头(headView)和表尾...

    android BaseAdapter listView优化

    在Android开发中,ListView是一个非常重要的组件,常用于展示大量数据列表。BaseAdapter则是与ListView配合使用的数据适配器,负责将数据绑定到ListView的各个视图上。本篇文章将深入探讨ListView与BaseAdapter的...

    android中ListView下拉刷新

    在Android开发中,ListView是一种常用的组件,用于展示大量的列表数据。它通过滚动的方式高效地管理视图,使得只渲染屏幕可见的部分,从而节省系统资源。然而,随着移动应用的不断发展,用户对交互体验的需求也在...

    androidlistview里面使用radiobutton

    在Android开发中,ListView是一种常用的组件,用于展示可滚动的多行...理解这些知识点对于开发高效、用户友好的Android应用至关重要。通过熟练掌握这些技术,开发者可以更好地实现ListView的个性化需求,提升用户体验。

    Android横向列表,横向listview实现

    这个概念通常与RecyclerView结合使用,因为RecyclerView是Android API 21及更高版本中推荐的列表视图组件,它可以提供更高效的数据绑定和更好的性能。 **一、RecyclerView简介** RecyclerView是Android系统提供的一...

    Android中ListView+Adapter

    在Android应用开发中,ListView是显示大量数据列表的常用组件,尤其在构建用户界面时扮演着重要角色。本文将深入探讨如何在Eclipse开发环境中利用ListView结合Adapter来展示数据。 首先,`ListView`是一个可滚动的...

    Android中ListView动态添加删除项

    在Android开发中,ListView是一种非常常见的控件,用于展示大量数据列表。它的高效性和可滚动性使得它在处理数据集合时十分有用。本教程将详细讲解如何在Android中实现ListView的动态添加和删除项功能。 一、...

    android listView 单选 功能

    ListView具有滚动和优化性能的特性,可以高效地处理大量数据。 二、实现单选功能的步骤 1. **定义数据模型** 首先,创建一个数据模型类,用于存储每个条目的数据,如文本信息、是否选中的状态等。 ```java public...

    Android解决ListView嵌套ScrollView不能刷新

    在Android开发中,ListView是一个非常常用的组件,它用于展示大量数据列表,具有高效的滚动性能和自动回收机制。然而,当ListView需要与ScrollView嵌套使用时,可能会遇到一些问题,特别是不能正常刷新。本文将深入...

    Android 解决ListView的复用问题 demo

    总之,理解和掌握ListView的复用机制对于任何Android开发者来说都是至关重要的,它不仅可以提升应用的性能,还能帮助开发者编写出更加健壮和高效的代码。这个demo和相关的博客文章为学习和实践这一关键技巧提供了...

    android 中ListView下载图片

    综上所述,通过异步加载库、ViewHolder优化、合理的缓存策略以及资源释放,我们可以实现高效且稳定的在ListView中加载图片。对于Android初学者来说,这是一个很好的实践项目,能够深入理解Android UI的优化和多线程...

    Android ListView实例代码

    ListView通过高效的滚动性能和可复用的视图来优化内存使用,使得在有限的内存条件下可以加载大量数据。下面我们将详细探讨Android ListView的相关知识点。 1. **ListView的基本使用** - 在布局文件中添加ListView...

    Android ListView实例源码

    在Android开发中,ListView是一个非常重要的组件,它用于展示大量数据列表,比如联系人列表、邮件列表等。这个实例源码“Test_Golf1”很可能包含了一个完整的ListView应用示例,帮助开发者理解如何在Android中有效地...

    android listview嵌套listview实现折叠列表

    1. 使用RecycleView替代ListView,RecycleView提供了更高效的视图复用机制。 2. 使用HeaderView和FooterView来代替嵌套的ListView,这可以减少层级,提高性能。 3. 使用ExpandableListView,这是一个内置支持折叠...

    Android review listview 显示 单击事件

    在Android开发中,ListView是常用的一种控件,用于展示大量数据列表。本篇文章将深入探讨如何在Android中实现ListView的显示以及单击事件处理。首先,我们了解ListView的基本概念。 ListView是一个可滚动的视图,它...

    android listview 高效显示网络图片,自定义listview布局

    在Android开发中,ListView是一种常用的组件,用于展示大量的数据列表。然而,当ListView中的每一项都需要显示网络图片时,如果不进行优化,可能会导致性能问题,如界面卡顿、滚动不流畅等。这个问题的解决方法是...

    android ListView简单用法

    在Android开发中,ListView是一个非常重要的组件,它用于展示大量数据的列表,用户可以通过滚动查看更多的条目。这个教程将详细介绍Android ListView的基本用法。 ### 1. 添加ListView到布局 首先,在XML布局文件...

    Android 使用ListView的A-Z字母排序功能实现联系人模块

    在Android开发中,ListView是一种常用的组件,用于展示大量的列表数据。在实现联系人模块时,A-Z字母排序功能是常见的需求,它可以帮助用户快速定位到特定联系人的位置。此外,结合搜索功能,可以让用户根据输入框的...

    android listview

    总之,理解并掌握android listview的相关知识,特别是横向ListView、微信风格的ListView以及XListView的优化,对于Android开发者来说至关重要,它们能帮助你创建出更加高效且用户体验良好的应用程序。

Global site tag (gtag.js) - Google Analytics