Android ListView之视图显示优化和注意事项
来源:互联网 发布:mac注音输入法 简体字 编辑:程序博客网 时间:2024/06/05 17:38
为了使Listview展现丰富的显示样式,可以自定义一个继承BaseAdapter的类。
public class CustomAdapter extends BaseAdapter { //一般都需要用到上下文 private Context ctx; //ListView将要展示的数据集合 private List<String> demos; public CustomAdapter(Context ctx, List<String> demos) { this.ctx = ctx; this.demos = demos; } @Override public int getCount() { //返回数据的总个数 return demos.size(); } @Override public Object getItem(int position) { //返回某一个具体数据 return demos.get(position); } @Override public long getItemId(int position) { //返回索引 return position; } //返回ListView每项要展示的View视图样式 @Override public View getView(int position, View convertView, ViewGroup parent) { return new DemoView(ctx, demos.get(position)); } //为了看得直观我将样式类也写在这个文件中 /*这是一个简单的view类,用于定义listview每项样式,也可以定义的很复杂*/ public class DemoView extends LinearLayout { public DemoView(Context context, String data) { super(context); //这里只是简单的将数据显示在TextView上,完全可以定义复杂的样式 TextView tv = new TextView(context); tv.setText(data); addView(tv); } }}上面的代码一般情况下是能够将数据很好的展现出来,并且可以自定义显示样式。不过,当数据十分之大时CustomAdapter的getView方法需要十分之多次new DemoView对象,这将给手机带来很大的负担,甚至导致out of memory,程序崩溃。为了避免这种情况,聪明的Android系统设计师早就将解决方案设计在了Listview之中。
Listview在我刚接触的时候给我带来的是崩溃的感觉,因为它被设计的是能够重用每个item的样式。这涉及的比较深层次些,待我研究透彻之后再分析说明。当数据量十分之大时,可以将上面的类这样优化
public class CustomAdapter extends BaseAdapter { //一般都需要用到上下文 private Context ctx; //ListView将要展示的数据集合 private List<String> demos; public CustomAdapter(Context ctx, List<String> demos) { this.ctx = ctx; this.demos = demos; } @Override public int getCount() { //返回数据的总个数 return demos.size(); } @Override public Object getItem(int position) { //返回某一个具体数据 return demos.get(position); } @Override public long getItemId(int position) { //返回索引 return position; } //返回ListView每项要展示的View视图样式 @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { //当要显示的view对象为null时,创建view对象 convertView = new DemoView(ctx); } //不管是重用的view还是新创建的view都需要更新下一个数据内容 ((DemoView) convertView).showData(demos.get(position)); //返回所显示的view return convertView; } //为了看得直观我将样式类也写在这个文件中 /*这是一个简单的view类,用于定义listview每项样式,也可以定义的很复杂*/ public class DemoView extends LinearLayout { private Context context; public DemoView(Context context) { //初始化一些必要的变量 super(context); this.context = context; } //构造视图,更新数据。 void showData(String data) { //将之前的显示数据清除,否则之前的数据和现在的数据会混乱显示 removeAllViews(); //这里只是简单的将数据显示在TextView上,完全可以定义复杂的样式 TextView tv = new TextView(context); tv.setText(data); addView(tv); } }}经过之上更改后,会很大成都的降低系统的消耗。DemoView中是通过new来创建组件的,完全可以通过定义xml样式来定义组件。
Listview值得注意的地方是要通过更改数据模型来改变组件的属性,不能直接对组件的属性直接设置,因为它是重用的,当直接设置组件的属性时,重用这个组件的其他数据也会显示这些属性。会出现错乱的显示效果。
总之,Listview还是一个相对复杂的组件,理解它的重用原理会让我们更好的使用它。等我很清晰它重用的原理时,会更一篇文章介绍。
0 0
- Android ListView之视图显示优化和注意事项
- [Android]ListView性能优化之视图缓存 解决listView显示重复问题
- [Android]ListView性能优化之视图缓存
- [Android]ListView性能优化之视图缓存
- [Android]ListView性能优化之视图缓存
- [Android]ListView性能优化之视图缓存
- Android ListView性能优化之视图缓存
- [Android]ListView性能优化之视图缓存
- [Android]ListView性能优化之视图缓存
- [Android]ListView性能优化之视图缓存
- [Android]ListView性能优化之视图缓存
- [Android]ListView性能优化之视图缓存
- [Android]ListView性能优化之视图缓存
- [Android]ListView性能优化之视图缓存
- [Android]ListView性能优化之视图缓存
- [Android]ListView性能优化之视图缓存
- [Android]ListView性能优化之视图缓存(android.widget.ListView)
- Android的Listview中显示多种视图 如何优化
- vc++中,图片的解压缩的方法
- 编程趣题之字符串过滤
- 初学Java,接口(十七)
- EnableViewState和EnableTheming的作用
- YII CMenu配置
- Android ListView之视图显示优化和注意事项
- NYOJ 514 1的个数
- ThreadPoolExecutor运转机制详解
- 堆,栈的区别
- 随手笔记-SQLPLUS使用-初级
- Eclipse中运行远程debug
- Linux时间函数
- C++数组引用
- MyEclipse6.5注册机,激活类