- 浏览: 434328 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
qja:
Iterator.remove()这个方法也会出错的。
java.util.ConcurrentModificationException 出现的原因和解决办法 -
angeli:
List<String> save = new A ...
java.util.ConcurrentModificationException 出现的原因和解决办法 -
大峰子:
灰常感谢 刚好碰到这个问题, 搜了好多都没找到解决方法
python学习笔记-Python交互模式下方向键出现乱码 -
anypwx:
牛哥,怎么找到的,解决了我的报错问题,谢谢
JSONObject NestableRuntimeException -
tp7300:
确实好很多了,谢谢博主。
Failed to install on device 'emulator-5554': timeout
在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>
效果图见附件
评论
2 楼
zhoujianghai
2010-11-18
时培峰 写道
好多冗余代码:o
,roomListView.setOnItemSelectedListener(...)这段代码可以去掉的
1 楼
时培峰
2010-11-18
好多冗余代码:o
发表评论
-
warning: libfmodex64.so, needed by ../../lib/linux/Debug/libcocosdenshion.so,
2012-03-13 01:20 1984linux环境下用cocos2d-x开发游戏时,遇到了 wa ... -
在工作线程中创建Toast
2011-10-14 18:11 3700在工作线程中创建Toast,代码如下: p ... -
GridView + ViewFlipper布局界面,模仿“机锋市场”
2011-10-09 18:22 2241源码在附件中,效果如图片 -
fedora14下连接android真机
2011-08-13 13:22 1358在fedora14下搭建好了andro ... -
fedora14下搭建Android开发环境
2011-07-12 23:59 2534一:下载linux版本的JDK,Eclipse,Andr ... -
简述android线程间消息处理机制(Looper、Handler和Message)
2011-06-17 21:51 7652作用:Android的线程间消息处理机制主要是用来处理主 ... -
Android中ImageButton实现“按下”效果
2011-06-16 12:26 7609使用Button的时候,实现“按下”的效果是很重要的,也 ... -
Android实现TCP与UDP传输
2011-05-21 14:50 5361关于TCP和UDP协议的描述,可参考http://zho ... -
android textview改变部分文字的颜色和string.xml中文字的替换
2011-05-18 18:49 17251一:TextView组件改变部分文字的颜色: Text ... -
AndroiManifest.xml文件中android属性
2011-05-16 11:59 1412android:allowTaskReparentin ... -
windows系统上安装与使用Android NDK r5
2011-01-26 13:17 11318windows系统上安装与使用Android NDK r ... -
android获取屏幕分辨率
2011-01-15 17:05 2098获取屏幕分辨率的代码: ... -
Android编译出现Multiple substitutions specified in non-positional format
2010-12-31 13:28 3840前段时间更新了ADT和Android SDK 2.3, ... -
TextView设置中文粗体
2010-12-30 13:25 5477在xml布局文件中设置android:textStyle=“b ... -
Failed to install on device 'emulator-5554': timeout
2010-12-20 10:41 6164Failed to install on device ... -
解决android logcat不打印信息
2010-11-30 19:06 7879用eclipse进行android开发中经常遇到logcat无 ... -
关于android设备的分辨率
2010-11-29 12:27 1958HVGA (Half-size VGA) 即VGA ... -
Toast的用法
2010-11-18 13:28 4585Toast是android中用来显示快速显示短信息的一种机制, ... -
activity切换特效(类似iphone的进入和退出时的效果)
2010-11-10 23:11 3877关于activity的切换,有很多挺好看的动画实现,最近在项目 ... -
美化listview时遇到的问题
2010-11-08 08:39 2518在android开发中,listview的默认背景颜 ...
相关推荐
Android ListView边框圆角美化,可以用来仿iphone的个别界面。相当有用。美观。
重画ListView控件,包括重画列头、选中时颜色和隔行换色功能。
C#的listview控件美化,使C#的listview控件漂亮
超高速度显示最漂亮的ListView增强美化版(VB)
控件重绘 C# WinForm控件美化扩展系列之ListView
Android ListView多种布局优化demo,使用了两种优化手段,包括convertView,ViewHolder,对应的我的博客地址是: http://blog.csdn.net/u012320459/article/details/47667869
前面的一篇文章C# WinForm控件美化扩展系列之ListView(2)中,存在列表项文本错乱的问题,这是因为绘制文本的时候不小心选错了一个属性,把SubItem选成了Item,所以总会得到了第一项的文本。除了修正这个错误外,对...
Android ListView性能优化方案示例,绝对有效的帮助解决ListView的性能优化问题,可以放心继承到项目中。
listview优化和异步加载全攻略,对android下listview的异步加载和优化,进行了优化,完整而且完美,欢迎下载
listView简单美化,使其看得更符合用户的美感。
AsyncTask的使用及ListView的常见优化 asyncTask异步加载数据 使用了LruCache优化图片加载 通过滑动监听提高ListView滑动流畅度
ListView与BaseAdapter的配套使用 理解android 中adapter适配的作用 以及ListView的优化方式
WPF ListView 漂亮样式,自己还可以根据自己的需求进行样式修改,表头、列表都可以根据注释进行拓展,很实用
ListView性能优化之视图缓存
在APP中90%要使用到的一个组件—–> ListView 听到这,大家觉得应该是再熟悉不过了吧,当然或许很多人已经知道 ListView 的优化。顺便让ListView分类显示。
本案例介绍了如何在ListView中添加底纹,需要美化的朋友请看看
ListView的3中优化方式
AsyncTask的使用及ListView的常见优化 asyncTask异步加载数据 使用了LruCache优化图片加载 通过滑动监听提高ListView滑动流畅度.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习...
android listview内存优化 10M图片 没有内存溢出和卡顿线程