ListView的使用及优化

ListView优化
使用ConvertView重用组件
即拖动时被遮住、看不见的控件,重用它,而非每次创建一个新的对象

使用内部类ViewHolder+ConvertView.setTag()保存控件,而不用每次查找
ViewHolder(视图的持有者)

使用分页查询(PullToRefresh)
使用AsyncTask(异步任务)加载数据,最少要重写以下这两个方法
doInBackground
后台执行
onPostExecute
在doInBackground方法执行结束之后在运行,并且运行在UI线程当中 可以对UI空间进行设置
关键代码:
myListViewAdapter.notifyDataSetChanged();// 通知适配器数据已改变
ptrlv_main_1.onRefreshComplete();// 通知控件数据已经加载完毕

事件监听的优化
假设Item中有三个按钮,要为三个按钮定义事件,如果是下面这样
btn1.setOnclickListener(new View.onClickListener(){
public void onClick(View view){
//…
}
});
btn2.setOnclickListener(new View.onClickListener(){
public void onClick(View view){
//…
}
});
btn3.setOnclickListener(new View.onClickListener(){
public void onClick(View view){
//…
}
});
如果每屏显示10个Item,那一共创建了30个listener对象在内存中。
如果,你是在Adapter创建时,只创建一个Listener,并将其定义成全局属性,
然后通过按钮的ID来进行判断是哪个事件应该触发,
class MyAdapter extends BaseAdapter{
View.onClickListener myListener = new View.onClickListener(){
public void onClick(View view){
if(view.getId() == R.id.btn1){
//…
}else if(view.getId() == R.id.btn2){
//…
}else if(view.getId() == R.id.btn3){
//…
}
}
});
}

    //注册监听器
    btn1.setOnclickListener(myListener);
    btn2.setOnclickListener(myListener);
    btn3.setOnclickListener(myListener);

另外,真实开发中,图片肯定是通过网络下载,也需要通过线程异步下载进行优化等等,但由于还涉及到android网络编程,
这部分的内容会在之后的课程中介绍

猜你喜欢

转载自blog.csdn.net/NiceOyj/article/details/82832277
今日推荐