android开发 ListView ProgressBar实时更新

本文介绍了一种在安卓APP中实现下载进度实时更新的方法。通过在Activity中使用ListView的getChildAt方法定位到可视区域内的具体Item,并更新ProgressBar进度。这种方法克服了Adapter中更新进度的局限性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近公司做的一款安卓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);
    }
});

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值