ListView优化原则:

UI优化:

listview条目与条目之间的间隙的分割内容 : android:divider="@android :color/transparent"
listview条目之间的间隙 : android:paddingTop="5.0dip"
listview点中的颜色变化 : android:listSelector="@color/transparent"
在listview的右边 会显示出来一个快速滚动的进度条 : android:fastScrollEnabled="true"

数据适配性能优化:

1.复用历史缓存的view对象 converview,减少采用布局填充器服务和填充布局的次数,达到减少xml->view 操作的次数.

2.定义静态的viewholder ,储存了view对象里面控件的引用, view.setTag() view.getTag(),减少遍历view对象 树状结构的次数

3.采用了内存缓存,缓存一些经常使用的数据:
服务器上的图片,缓存这些图片到手机的Rom卡,sd卡,然后把图片给缓存到内存里面;
缓存从数据库中查询出的所有数据,减少查询数据库的动作

高级优化:

listview的延时加载: 如果listview里面要显示的有很多的数据, 我们不需要一次把所有的数据都获取出来.
分批的加载数据:注册listview滚动监听器onScrollListener(),发现最后一个可见的条目 为listview里面数据适配器里面的最后的一个条目, 从服务器加载更多的内容.
分页的加载数据:服务器需要提供接口, 一次获取一段的数据;数据库提供接口 ,一次查询一段的数据.

listview的快速拖动优化:
当listview在滚动状态下,不去加载listview里面真实的图片和内容,而是把一个缩略图加载界面上.
当listview的滚动状态停止的时候 才去真正的更新里面的条目的内容.
如何让你的ListView实现自动滚动呢? Android其实已经考虑到ListView控件的智能滚动操作。

直接在Layout中写即可,注意下面的stackFromBottom以及transcriptMode这两个属性。

BaseAdapter,官网链接--http://developer.android.com/intl/zh-cn/reference/android/widget/BaseAdapter.html

继承:Object

接口:ListAdapter  SpinnerAdapter

已知直接子类:

ArrayAdapter<T>, CursorAdapter, SimpleAdapter

已知间接子类:

ResourceCursorAdapter, SimpleCursorAdapter

使用BaseAdapter,需要实现4个方法:

getCount()                                                                          --返回需要ListView显示的item数量
getItem(int position)                                                            --返回item的位置
getItemId(int position)                                                         --返回item的id
getView(int position, View convertView, ViewGroup parent)      --显示item的内容

--------------------------------------------------------------------------------------------------------------------------------------

实例(创建一个通讯录):

MainActivity.java代码

 public class MainActivity extends Activity {

     private ListView phoneList;
private MyAdapter adapter; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GetPhone.getPhone(MainActivity.this);
phoneList = (ListView) findViewById(R.id.phoneList);
adapter = new MyAdapter(GetPhone.lists, MainActivity.this);
phoneList.setAdapter(adapter);
} }
布局文件activity_main.xml
 <LinearLayout 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"
android:orientation="vertical"
tools:context="com.lijingbo.getmyphonenumber.MainActivity" > <ListView
android:id="@+id/phoneList"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView> </LinearLayout>

获取通讯录中联系人的姓名和号码,GetPhone.java

 public class GetPhone {

     static List<PhoneInfo> lists = new ArrayList<PhoneInfo>();

     public static List<PhoneInfo> getPhone(Context context) {

         ContentResolver contentResolver = context.getContentResolver();
Cursor cursor = contentResolver.query(Phone.CONTENT_URI, null, null,
null, null);
while (cursor.moveToNext()) {
String number = cursor.getString(cursor
.getColumnIndex(Phone.NUMBER));
String name = cursor.getString(cursor
.getColumnIndex(Phone.DISPLAY_NAME));
Log.d("getmyphonenumber", name + "电话号码:" + number);
PhoneInfo phoneInfo = new PhoneInfo(name, number);
lists.add(phoneInfo);
}
return lists;
}
}

实体类 PhoneInfo.java

 public class PhoneInfo {

     private String name;
private String number; public PhoneInfo(String name, String number) {
setName(name);
setNumber(number); } public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getNumber() {
return number;
} public void setNumber(String number) {
this.number = number;
} }

MyAdapter.java

 public class MyAdapter extends BaseAdapter {

     private List<PhoneInfo> lists;
private Context context; public MyAdapter(List<PhoneInfo> lists,Context context){
this.lists=lists;
this.context=context;
} @Override
public int getCount() {
return lists.size();
} @Override
public Object getItem(int position) {
return position;
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder=null;
if (convertView==null) {
holder=new ViewHolder();
convertView=LayoutInflater.from(context).inflate(R.layout.phonedetails, null);
holder.showName=(TextView) convertView.findViewById(R.id.showName);
holder.showNumber=(TextView) convertView.findViewById(R.id.showNumber);
convertView.setTag(holder);
}else {
holder=(ViewHolder) convertView.getTag();
}
holder.showName.setText(lists.get(position).getName());
holder.showNumber.setText(lists.get(position).getNumber());
return convertView;
} static class ViewHolder{
public TextView showName;
public TextView showNumber;
} }
phonedetails.xml文件
 <?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="horizontal" > <TextView
android:id="@+id/showName"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="name"/>
<TextView
android:id="@+id/showNumber"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="number"/> </LinearLayout>
 

Android开发之ListView-BaseAdapter的使用的更多相关文章

  1. 【转】Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法

    Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法 [原文链接] 这篇文章完美的解决了我几个月没结论的bug... 感谢热爱分享的技术达人~ 我是怎么走进这个大坑的 ...

  2. Android开发之ListView添加多种布局效果演示

    在这个案例中展示的新闻列表,使用到ListView控件,然后在适配器中添加多种布局效果,这里通过重写BaseAdapter类中的 getViewType()和getItemViewType()来做判断 ...

  3. Android开发之ListView实现不同品种分类分隔栏的效果(非ExpandableListView实现)

    我们有时候会遇到这么一个情况.就是我在一个ListView里面须要显示的东西事实上是有种类之分的.比方我要分冬天,夏天.秋天.春天,然后在这每一个季节以下再去载入各自的条目数据. 还有,比方我们的通讯 ...

  4. android 开发之 ListView 与Adapter 应用实践

    在开发android中,ListView 的应用显得非常频繁,只要需要显示列表展示的应用,可以说是必不可少,下面是记录开发中应用到ListView与Adapter 使用的实例: ListView 所在 ...

  5. Android开发之ListView设置隔行变色

    public class HLCheckAdapter extends BaseAdapter { private List<HuoLiang> list; private Context ...

  6. Android开发之ListView条目批量选择删除

    ListView实现的列表,假设是可编辑,可删除的,一般都要提供批量删除功能,否则的话,一项一项的删除体验非常不好,也给用户带来了非常大的麻烦. 实现效果图 详细实现代码 select.xml 主布局 ...

  7. Android开发之ListView详解 以及简单的listView优化

    ListView列表视图 最常用的控件之一,使用场景例如:微信,手机QQ等等. android:divider:每个item之间的分割线,可以使用图片或者色值. android:dividerHeig ...

  8. android开发之 listview中的item去掉分割线 隐藏分割线

    有三种方法: 1> 设置android:divider="@null" 2> android:divider="#00000000" #000000 ...

  9. 【Android UI】Android开发之View的几种布局方式及实践

    引言 通过前面两篇: Android 开发之旅:又见Hello World! Android 开发之旅:深入分析布局文件&又是“Hello World!” 我们对Android应用程序运行原理 ...

  10. Android开发之Java集合类性能分析

    对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的,目前主要提供了List.Set和 Map这三大类的集合,今天Android吧(ard8. ...

随机推荐

  1. TortoiseSVN本地代码版本控制设置步骤。

    1.下载安装TortoiseSVN客户端. 2.在某个盘创建空的文件夹作为项目代码的版本库.在空的文件夹内部右键鼠标TortoiseSVN->Create repository here 3.在 ...

  2. 【html】【16】高级篇--毛玻璃效果[模糊]

    参考: http://www.zhangxinxu.com/wordpress/2013/11/%E5%B0%8Ftip-%E4%BD%BF%E7%94%A8css%E5%B0%86%E5%9B%BE ...

  3. javascript form验证、完善 第24节

    <html> <head> <title>Form对象</title> <style type="text/css"> ...

  4. Git的安装以及注册账号等操作

    1.安装Git-2.5.1-64-bit.exe  一直下一步直至完成 2.注册github账号 官网地址:https://github.com/github 3.找到一个按钮“New Reposit ...

  5. android 文件的权限

  6. 学习C++ Primer 的个人理解(七)

    类,后面还有两章是介绍有关于类的内容的.这一张依然只是个概括.但也已经将大致用法介绍完了. 重点如下: 1.成员函数的声明,必须在类的内部. 2.引用const成员函数 我们知道成员函数中有一个名为t ...

  7. 改善EF代码的方法(下)

    本节,我们将介绍一些改善EF代码的方法,包括编译查询.存储模型视图以及冲突处理等内容. > CompiledQuery 提供对查询的编译和缓存以供重新使用.当相同的查询需要执行很多遍的时候,那么 ...

  8. java oop

    /** 多层嵌套内部类, 调用时要层层往下调用 格式: 外部类.内部类1.内部类2 对象名 = new 外部类().new 内部类1().new 内部类2(); 对象名.属性/方法名(); */ cl ...

  9. php中utf8 与utf-8 与utf8 无BOM

    utf8 与utf-8 相信很多程序员刚开始也会有这样的疑惑,如题,我也是.    其实,他们可以这样来区分.    一.在php和html中设置编码,请尽量统一写成“UTF-8”,这才是标准写法,而 ...

  10. 温故知新——json

    Json简介 Json(JavaScript Object Notation)是一种轻量级的数据交换格式.它是基于javascript(Standard ECMA-262 3rd Edition - ...