最近公司做的一款安卓APP项目需要实现一个下载功能,其中我用listView列表来展示下载项目,每个Item里面用到了ProgressBar控件来实时显示下载进度,我是通过接口获取每个线程对应的下载进度在item的ProgressBar更新的,最开始我把这个部分处理在Adpater里面处理的。结果我用尽各种办法都没有实现让他实时更新ProgeressBar进度。
纠结了几天过后,我在网上查了一些资料。最终找到了解决方法,这里感谢一下大佬给我指了路。方法就是在listView所在Activity里面对每个item进度进行更新。先通过ListView的getChildAt(int postion)的方法获取对应的item,然后在UI线程更新对应的progressBar值。
代码如下
private void proProgress(final int adapterPostion, final int pro){ downFileTaskManger.getData().get(adapterPostion).setPro(pro); if(adapterPostion>=xListView.getFirstVisiblePosition()&&adapterPostion<=xListView.getLastVisiblePosition()){ int postionVIew = adapterPostion - xListView.getFirstVisiblePosition(); View item = xListView.getChildAt(postionVIew); ProgressBar progressBar = (ProgressBar) item.findViewById(R.id.item_down_pro); progressBar.setProgress(pro); if(pro==100) { TextView state = (TextView) item.findViewById(R.id.item_down_size); data.get(postionVIew).setfSzie("完成"); state.setText("本地/xyztc"); } } }
备注:
1、这个方法要放在ListView所在Activity类里面,adapterPostion为要更新的item位置,pro为进度值。
2、此方法需要放在UI线程执行我用的Handler机制如下
new Handler(XzZlActivity.this.getMainLooper()).post(new Runnable() { @Override public void run() { proProgress(pos,up); } });