`
zhoujianghai
  • 浏览: 439887 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

listview的美化和优化

阅读更多

在android开发中,listview是比较常用的一个组件,它以列表的形式显示数据。列表显示需要三个元素:

1、listview用来显示具体列表的view

2、XXAdapter适配器用来把具体的数据映射到listview

3、具体需要展示的数据,比如文字,图片,按钮等组件

 

listview的适配器类型主要分为三种:ArrayAdapter、SimpleAdapter、SimpleCursorAdapter。

ArrayAdapter比较简单,只能显示一行文字,SimpleAdapter扩充性很好,可以自己定义出很多种效果,SimpleCursorAdapter可以和数据库很好的结合,把数据库中的表的内容展示到列表上。

 

有些时候,由于我们需要展示的数据量很大,而且也需要美化显示的效果,这时我们就需要自定义一个适配器,只需继承BaseAdapter,实现它的四个方法。listview在开始绘制的时候,首先调用getCount()方法,得到需要绘制的item数量,再调用getView绘制每一个item,每调用一次getView都会实例化一个view对象,因此对于显示大量数据的时候,必须进行优化。下面是一个小例子,getView方法对listview进行了一定的优化,当listview的某一项被选择或者点击时,更换该项的背景图片。源码如下:

ListViewActivity.java

 

package com.alex.activity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemSelectedListener;

public class ListViewActivity extends Activity {
    /** Called when the activity is first created. */
	private List<Map<String, Object>> datas = null; //存放初始化数据
	private ListView roomListView = null; 
	//Button back;
    @Override
    public void onCreate(Bundle savedInstanceState) {
    	super.onCreate(savedInstanceState);
    	//去除窗口的title区域
		this.requestWindowFeature(Window.FEATURE_NO_TITLE);
		//全屏显示
		this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
				WindowManager.LayoutParams.FLAG_FULLSCREEN);
		this.setContentView(R.layout.listview);
		
		initDatas();
		findViews();
    }
    
    private void initDatas() {
    	datas = new ArrayList<Map<String,Object>>();
    	for(int i=0;i<12;i++) {
    		Map<String, Object> itemMap = new HashMap<String,Object>();
    		itemMap.put("data", "测试数据"+i);
    			datas.add(itemMap);
    	}
    }
    
    private void findViews() {
    	roomListView = (ListView)findViewById(R.id.room_list);
    	roomListView.setAdapter(new MyListViewAdapter(this));
    	roomListView.setVerticalScrollBarEnabled(true); //显示垂直滚动条
    	roomListView.setSelection(0); //默认选中第一项
    }
    
    
    public class MyListViewAdapter extends BaseAdapter {

    	private LayoutInflater mInflater; //作用:把xml布局文件实例化成View
    	
    	public MyListViewAdapter(Context context) {
    		this.mInflater = LayoutInflater.from(context);
    	}
		@Override
		public int getCount() {
			return datas.size();
		}

		@Override
		public Object getItem(int position) {
			return null;
		}

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

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			ViewHolder holder = null;
			if(convertView == null) {
				holder = new ViewHolder();
				convertView = mInflater.inflate(R.layout.list_row, null);
				convertView.setBackgroundResource(R.drawable.dtht_1);
				holder.data = (TextView)convertView.findViewById(R.id.data);
					
				convertView.setTag(holder);
			}
			else {
				holder = (ViewHolder)convertView.getTag();	
			}
			
			holder.data.setText(String.valueOf(datas.get(position).get("data")));
					return convertView;
		}
    	
    }
    
    public final class ViewHolder {
    	TextView data;
    }
}
 

 

listview.xml

 

 

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent"
		android:layout_height="fill_parent"
		>

		<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
		android:orientation="horizontal" android:layout_width="fill_parent"
		android:layout_height="fill_parent"
		>
		<ListView android:id="@+id/room_list"
		android:layout_width="fill_parent"
		android:layout_height="fill_parent"
		android:listSelector="@drawable/dtht_2"
		android:background="@drawable/dtht_1"
		android:cacheColorHint="#00000000" 
		android:divider="#00000000" 
		android:dividerHeight="1dip" 
		/>
		</LinearLayout>

	</FrameLayout>

 

 

 list_row.xml

 

<?xml version="1.0" encoding="utf-8"?>

		<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
		android:layout_width="fill_parent"
		android:layout_height="fill_parent">
		
	<TextView android:id="@+id/data"
			android:layout_width="fill_parent"
			android:layout_height="36dip" 
			 android:layout_alignParentLeft="true"
			 android:gravity="center"
			 android:textColor="#ffffff"
			 />
	
		</RelativeLayout>
 

 

 

效果图见附件

 

  • 大小: 13.7 KB
分享到:
评论
2 楼 zhoujianghai 2010-11-18  
时培峰 写道
好多冗余代码:o

,roomListView.setOnItemSelectedListener(...)这段代码可以去掉的
1 楼 时培峰 2010-11-18  
好多冗余代码:o

相关推荐

    C#-winform-listview控件美化

    然而,ListView控件默认的样式相对朴素,为了提升用户体验和界面美观度,开发者通常需要对其进行一定程度的自定义和美化。本主题将深入探讨如何实现“C# WinForm ListView控件美化”,包括重画列头、选中时的颜色...

    超高速度显示最漂亮的ListView增强美化版(VB)

    总之,"超高速度显示最漂亮的ListView增强美化版(VB)"是VB开发中的一个实用工具,它通过视觉优化和性能提升,使得ListView成为了一个功能强大且美观的界面元素。如果你在VB项目中需要一个高效且易于定制的列表展示...

    Android ListView边框圆角美化

    总的来说,Android ListView的边角圆角美化涉及到自定义布局、形状资源、适配器的使用以及一些细节的优化。通过这种方式,我们可以使ListView更加美观,提升应用的整体设计感。同时,也要注意性能问题,避免过度绘制...

    C#Listview控件美化的类文件

    - "listview美化"这个类文件可能是实现了ListView美化逻辑的C#代码,包含自定义绘制方法、颜色配置、鼠标事件处理等。 - 类文件通常包含构造函数,用于初始化控件的基本属性;可能还有`OnPaint`事件处理程序,用于...

    WPF ListView 漂亮样式

    在Windows Presentation Foundation (WPF) 中,ListView 是一个强大的控件,用于展示数据集合,并提供了多种自定义样式和布局选项,使得用户界面更加美观和功能丰富。本教程将深入探讨如何利用WPF ListView 创建漂亮...

    美化ListView在ListView中添加底纹

    在Windows Forms应用开发中,ListView控件是一种常用的数据展示组件,它可以用来显示一系列项,每项可以包含多个列。...记得在实际操作中,根据项目需求和用户反馈不断优化和调整,以达到最佳的美化效果。

    listview 适配器 优化 重用

    总结,优化ListView的关键在于视图复用,同时合理处理点击事件,美化界面,并根据需要自定义对话框和输入方式。通过这些技巧,可以提升用户体验,降低应用的资源消耗。希望以上分享能对你的开发工作有所帮助。

    listView简单美化

    ListView的简单美化是提升应用用户体验的关键步骤,这涉及到自定义适配器、视图复用以及视觉效果优化等多个方面。下面将详细介绍如何对ListView进行美化。 1. 自定义适配器:ListView的数据展示通常通过Adapter来...

    C++listview控件(结合了树和选择框)

    ListView控件可以显示多列数据,并且具有多种视图模式,包括报告视图、小图标视图、大图标视图和详细信息视图。在这个特殊的案例中,我们讨论的是一个扩展的ListView控件,它结合了树结构和Checkbox选择框,为用户...

    使用ListView控件实现漂亮的自定义表格效果实例源码

    4. **数据加载优化**:由于ListView的滚动特性,我们通常采用“懒加载”策略,即只在需要时加载可见的数据项,以提高性能。这可以通过实现`ViewHolder`模式来实现,缓存复用ListView的子View,减少不必要的 ...

    C# 自定义ListView

    7. **样式和模板**:为了美化界面,可以自定义ListView的样式,包括ItemContainerStyle、HeaderStyle等,改变字体、颜色、背景等视觉元素。同时,也可以使用ControlTemplate来完全定制ListView的外观。 在提供的...

    android xml解析传值到listview布局成的表格且使用style

    本教程将详细讲解如何通过XML解析将数据传递给ListView,并将ListView布局成表格形式,同时利用Style来美化界面。 首先,让我们了解一下XML解析。XML(Extensible Markup Language)是一种结构化数据格式,常用于...

    web形式的listview

    总之,Web形式的ListView是Web开发中的重要组件,它结合HTML、CSS和JavaScript实现了数据的展示、样式美化、交互功能以及性能优化。理解和熟练运用ListView的实现原理和技巧,能够帮助开发者构建出高效且用户体验...

    B Listview行高更改与美

    综上所述,`B Listview行高更改与美`涉及到Android开发中的自定义布局、视图复用、性能优化以及界面美化等多个方面,通过这些技巧,我们可以打造出既美观又高效的ListView应用。在实际开发中,开发者需要根据具体...

    android Listview 实现星座列表 查看星座详细信息

    在Android开发中,ListView是...在实际开发中,还可以根据需求对列表项的样式进行美化,或者使用更高效的ViewHolder模式优化ListView的性能。通过这种方式,开发者可以灵活地构建各种列表型界面,满足用户的交互需求。

    Android圆角ListView并完美解决和ScrollView共存问题

    在Android应用开发中,ListView是常用的视图组件,用于展示大量数据列表,而圆角ListView则是对默认样式的一种美化,可以提升用户界面的视觉效果。本文将深入探讨如何实现一个带有圆角的ListView,并解决其与...

    android listview小例子

    "android listview小例子"这个项目提供了一个简单的ListView demo,其主要目的是展示如何创建一个具有背景颜色和美化效果的ListView。下面我们将深入探讨这个话题,了解如何在Android应用中实现一个炫目多彩的...

    应用源码ListView上下翻页效果.zip

    总之,这个源码包提供了ListView滚动效果的学习实例,可以帮助开发者深入理解ListView的工作机制,学习如何处理滚动事件、实现下拉刷新和上拉加载更多功能,以及自定义Adapter来美化列表。对于进行毕业设计或代码...

    AQ47 改LISTVIEW图标了

    4. UI/UX优化和Material Design原则 5. 可能涉及的文件类型:XML布局文件、图片资源、代码文件 为了实现ListView图标的更改,开发者需要对Android的资源系统和UI组件有深入理解,同时具备一定的图形设计知识,以便...

    listview 變色

    "listview 變色"这个主题主要涉及如何对ListView进行美化,尤其是改变其背景颜色、项之间的间隔颜色等,以提升用户界面的视觉效果。下面我们将深入探讨如何实现ListView的变色技巧。 1. **设置ListView的基础颜色**...

Global site tag (gtag.js) - Google Analytics