在列表中显示多个下载进度条是一个很常见的需求了,
这个需求主要涉及到以下两个技术点:
1.Handler异步更新UI
2.ListView进行局部更新
今天来看一下这一功能最简单的实现——模仿多个APP下载更新进度条。
为了让代码简单一些,在这里使用了ListView显示列表,直接使用线程控制进度更新。
首先,来创建一个AppItem的类在ListView中显示项目:
public class AppItem {
private String appName;
private int currentProgress;
private int appIndex;
public AppItem(String name, int index) {
appName = name;
currentProgress = 0;
appIndex = index;
}
public String getAppName() {
return appName;
}
public void setCurrentProgress(int progress) {
currentProgress = progress;
}
public int getCurrentProgress() {
return currentProgress;
}
public int getAppIndex() {
return appIndex;
}
}
为简单说明,列表项设定的很简单,仅有应用名称,下载进度和项目在列表中的index这三个元素。
下载进度默认为0,在创建项目时必须提供应用名称和index数值。
然后来编写ListView的Adapter.
在这里,考虑到应用下载时进度条时刻变化,并且各项之间没有同步关系,因此需要提供一个方法来允许我们更新ListView中的某一项,而不是每次调用notifyDataSetChanged更新整个list,那样会非常耗费资源。
同时,还需要创建一个ViewHolder并使用缓存机制节省内存。
class AppListAdapter extends BaseAdapter {
//为描述简便,将Adapter直接定义在MainActivity,并且直接读取Activity中的mData(ArrayList)
LayoutInflater mInflater;
public AppListAdapter(Context context)