Android开发之ListView-BaseAdapter的使用

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代码

 1 public class MainActivity extends Activity {
 2 
 3     private ListView phoneList;
 4     private MyAdapter adapter;
 5 
 6     @Override
 7     protected void onCreate(Bundle savedInstanceState) {
 8         super.onCreate(savedInstanceState);
 9         setContentView(R.layout.activity_main);
10         GetPhone.getPhone(MainActivity.this);
11         phoneList = (ListView) findViewById(R.id.phoneList);
12         adapter = new MyAdapter(GetPhone.lists, MainActivity.this);
13         phoneList.setAdapter(adapter);
14     }
15 
16 }
布局文件activity_main.xml
 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical"
 6     tools:context="com.lijingbo.getmyphonenumber.MainActivity" >
 7 
 8     <ListView
 9         android:id="@+id/phoneList"
10         android:layout_width="match_parent"
11         android:layout_height="match_parent" >
12     </ListView>
13 
14 </LinearLayout>

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

 1 public class GetPhone {
 2 
 3     static List<PhoneInfo> lists = new ArrayList<PhoneInfo>();
 4 
 5     public static List<PhoneInfo> getPhone(Context context) {
 6 
 7         ContentResolver contentResolver = context.getContentResolver();
 8         Cursor cursor = contentResolver.query(Phone.CONTENT_URI, null, null,
 9                 null, null);
10         while (cursor.moveToNext()) {
11             String number = cursor.getString(cursor
12                     .getColumnIndex(Phone.NUMBER));
13             String name = cursor.getString(cursor
14                     .getColumnIndex(Phone.DISPLAY_NAME));
15             Log.d("getmyphonenumber", name + "电话号码:" + number);
16             PhoneInfo phoneInfo = new PhoneInfo(name, number);
17             lists.add(phoneInfo);
18         }
19         return lists;
20     }
21 }

实体类 PhoneInfo.java

 1 public class PhoneInfo {
 2 
 3     private String name;
 4     private String number;
 5 
 6     public PhoneInfo(String name, String number) {
 7         setName(name);
 8         setNumber(number);
 9 
10     }
11 
12     public String getName() {
13         return name;
14     }
15 
16     public void setName(String name) {
17         this.name = name;
18     }
19 
20     public String getNumber() {
21         return number;
22     }
23 
24     public void setNumber(String number) {
25         this.number = number;
26     }
27 
28 }

MyAdapter.java

 1 public class MyAdapter extends BaseAdapter {
 2     
 3     private List<PhoneInfo> lists;
 4     private Context context;
 5     
 6     public MyAdapter(List<PhoneInfo> lists,Context context){
 7         this.lists=lists;
 8         this.context=context;
 9     }
10 
11     @Override
12     public int getCount() {
13         return lists.size();
14     }
15 
16     @Override
17     public Object getItem(int position) {
18         return position;
19     }
20 
21     @Override
22     public long getItemId(int position) {
23         return position;
24     }
25 
26     @Override
27     public View getView(int position, View convertView, ViewGroup parent) {
28         ViewHolder holder=null;
29         if (convertView==null) {
30             holder=new ViewHolder();
31             convertView=LayoutInflater.from(context).inflate(R.layout.phonedetails, null);
32             holder.showName=(TextView) convertView.findViewById(R.id.showName);
33             holder.showNumber=(TextView) convertView.findViewById(R.id.showNumber);
34             convertView.setTag(holder);
35         }else {
36             holder=(ViewHolder) convertView.getTag();
37         }
38         holder.showName.setText(lists.get(position).getName());
39         holder.showNumber.setText(lists.get(position).getNumber());
40         return convertView;
41     }
42     
43     static class ViewHolder{
44         public TextView showName;
45         public TextView showNumber;
46     }
47 
48 }
phonedetails.xml文件
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="horizontal" >
 6 
 7     <TextView
 8         android:id="@+id/showName"
 9         android:layout_width="0dp"
10         android:layout_height="wrap_content" 
11         android:layout_weight="1"
12         android:text="name"/>
13     <TextView
14         android:id="@+id/showNumber"
15         android:layout_width="0dp"
16         android:layout_weight="1"
17         android:layout_height="wrap_content" 
18         android:text="number"/>
19 
20 </LinearLayout>

 

 

 

转载于:https://www.cnblogs.com/liyiran/p/4662013.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值