ListView的使用和优化
来源:互联网 发布:北京宝库在线网络 编辑:程序博客网 时间:2024/05/29 11:32
ListView是android中比较常用的控件,常用于显示列表等,对于它的使用应该熟练掌握。
一、ListView的使用
1,在布局文件中声明一个ListView控件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="cn.com.cyj.Listview.MainActivity" > <ListView android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="match_parent" > </ListView></RelativeLayout>2,编写要ListView每一个条目显示的控件布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/tv_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="名字" /> <TextView android:id="@+id/tv_number" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="号码" /></LinearLayout>
3,在java文件中通过id获得ListView控件,并给控件设置一个adapter
package cn.com.cyj.Listview;import java.util.List;import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ListView;import android.widget.TextView;public class MainActivity extends ActionBarActivity {private ListView listView;String[] name = new String[] { "张三", "李四", "王五", "赵六", "陈七"};String[] number = new int[] {"1234567890","987654312","6548415134","654897132"};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);listView = (ListView) findViewById(R.id.lv);// 给listview添加适配器,用于把集合中的数据显示到listviewlistView.setAdapter(new MyAdapter());}// 接口的默认实现类simpleXXX,BaseXXX,defaultXXXprivate class MyAdapter extends BaseAdapter {// 获得条目数@Overridepublic int getCount() {return personList.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn number[position];}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {View v = convertView;// 因为返回view对象,通过资源ID,把指定的布局文件填充成view对象v = View.inflate(MainActivity.this, R.layout.listview_item,null);// findViewById(id)默认在activity_xml中查找,在其前面加view对象引用即在指定的xml文件中查找TextView tv_name = (TextView) v.findViewById(R.id.tv_name);TextView tv_number = (TextView) v.findViewById(R.id.tv_number);tv_name.setText(name[position]);tv_number.setText(number[position]);return v;}}}
这样ListView就可以使用了。
二、ListView的优化
在使用ListView时,由于加载的条目过多在滑动时会造成卡顿,因为ListView在当前屏幕显示多少个条目就会创建多少个对象,每一个条目都是一个对象,在滑动时,滑出屏幕的对象被销毁,新加载到屏幕上的条目会创建新的对象;这样,在ListView快速滑动时会不断的创建对象->销毁对象->创建对象,并且每一个条目都会加载一次布局,通过findViewById()操作初始化控件,xml文件以树形结构进行加载,每一次加载都从根节点进行初始化,对内存消耗很大,浪费时间。如果条目有图片,图片加载时间比较长,会造成内存溢出。因此,需要对ListView进行优化,优化的原理是在滑动时不会重复创建对象,减少内存消耗和屏幕渲染处理。优化步骤如下:
1,创建静态类
将需要加载的控件变量放在该静态类中,保证所有控件只创建一次对象。
static class ViewHolder{<span style="white-space:pre"></span>TextView tv_name;<span style="white-space:pre"></span>TextView tv_number;}2,复用convertView对象
在Adapter的getView()方法中,第二个参数convertView就是之前滑出屏幕的条目对象。如果第一次加载该方法,会创建行的View对象,如果滑动ListView,滑动出屏幕的View对象会以缓存的形式存在,convertView就是缓存的View对象,可以通过复用该缓存对象减少对象的创建。在加载布局时先判断convertView对象是否存在,如果convertView == null说明没有缓存对象,使用View.inflate()方法加载布局,进行布局初始化;否则复用缓存的View对象。
@Overridepublic View getView(int position, View convertView, ViewGroup parent) {if (convertView == null) {convertView = View.inflate(ContactsActivity.this,R.layout.item_contacts, null);holder = new ViewHolder();holder.tv_ame = (TextView) convertView.findViewById(R.id.tv_name);holder.tv_number = (TextView) convertView.findViewById(R.id.tv_number);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}holder.tv_name.setText(name[position]);holder.tv_number.setText(<span style="font-family: Arial, Helvetica, sans-serif;">number[position]</span>);return convertView;}这样就完成了ListView的优化。
- ListView的使用和优化
- ListView的优化和使用
- ListVIew的使用和优化
- listView使用和优化
- ListView的简单使用和性能优化
- listview 常见的优化和使用技巧
- 再探ListView的使用和优化
- ListView 的优化使用
- ListView和RecyclerView的使用和性能优化总结
- listview的基本使用,listview的优化
- Android杂谈--ListView之BaseAdapter的使用和优化
- Android-ListView适配器BaseAdapter的使用和优化
- 【Android UI】ListView的使用和简单优化
- 安卓基础:ListView的简单使用和优化
- ListView 的优化及使用
- Android 使用Listview的优化
- ListView的使用及其优化
- ListView优化--ViewHolder的使用
- HashMap深度解析(一)
- 括号匹配-java代码
- 单cpu计算作业轮询平均等待时间的算法
- Linux 安装Tomcat指定JDK
- json解析-fastjson封装
- ListView的使用和优化
- 的五次C++作业
- 常用命令
- 【java】KDTree,实现个java版本,留着日后可能用得上
- 自学Java步骤
- Java并发编程:线程池的使用
- wifidog源码分析 - 初始化阶段
- Android之圆角矩形
- HDU 4300 (KMP)