Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2565197
  • 博文数量: 315
  • 博客积分: 3901
  • 博客等级: 少校
  • 技术积分: 3640
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-08 15:32
个人简介

知乎:https://www.zhihu.com/people/monkey.d.luffy Android高级开发交流群2: 752871516

文章分类

全部博文(315)

文章存档

2019年(2)

2018年(1)

2016年(7)

2015年(32)

2014年(39)

2013年(109)

2012年(81)

2011年(44)

分类: Android平台

2015-01-17 20:53:55

    本来说好更新关于AndroidPN的文章的,但是由于....,先更新下关于Listview条目下载的问题。
    看图说话:

    大概就是这样一个效果,有一个BUG【代码里面未解决】:就是这样虽然是可以下载,也能实时移除下载后的条目,没啥崩溃,但是刷新后其它的条目的进度就没了,或者说错乱了。   主要是因为代码里面是这样实现的:DEMO下载地址:  
    

点击(此处)折叠或打开

  1. @SuppressLint({ "ViewHolder", "InflateParams", "SdCardPath" })
  2.     @Override
  3.     public View getView(int position, View contentView, ViewGroup parent)
  4.     {
  5.         // TODO Auto-generated method stub
  6.         final Item item = list.get(position);
  7.         LinearLayout layout = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.ite,null);
  8.         Button b = (Button) layout.findViewById(R.id.b);
  9.         final ProgressBar p = (ProgressBar) layout.findViewById(R.id.p1);
  10.         // 这里就是验证刷新后的对象的地址
  11.         System.out.println(p);
  12.         b.setText(item.getName());
  13.         b.setOnClickListener(new OnClickListener()
  14.         {

  15.             @Override
  16.             public void onClick(View v)
  17.             {
  18.                 // TODO Auto-generated method stub
  19.                 final MultiThreadDownload tastk0 = new MultiThreadDownload(item.getUrl(), "/sdcard/"+item+".png", 3);
  20.                 tastk0.setDownThreadListenner(new MultiThreadDownloadListenner()
  21.                 {
  22.                     @Override
  23.                     public void onSuccess()
  24.                     {
  25.                         // Do not like this.
  26.                         //                        list.remove(item);
  27.                         Message m = hd.obtainMessage();
  28.                         m.obj = item;
  29.                         ///< 这里发hanler去删除条目,不能在这里直接删除;如果出现同时删除的话会崩溃的,而使用Handler是有顺序的,避免了崩溃
  30.                         hd.sendMessage(m);
  31.                     }

  32.                     @Override
  33.                     public void onProgress(long bytes, float percent)
  34.                     {
  35.                         p.setProgress((int) (100*percent));
  36.                         ///< 实时更新数据库的下载信息【目的就是显示进度,可以优化为两次更新一次】
  37.                     }
  38.                 });
  39.                 new Thread(new Runnable()
  40.                 {
  41.                     @Override
  42.                     public void run()
  43.                     {
  44.                         tastk0.start();
  45.                     }
  46.                 }).start();
  47.             }
  48.         });
  49.         return layout;
  50.     }
    所以可以看到,如果一旦刷新的话,原来的对象的地址是变化了,也就是说你的p.setProgress((int) (100*percent)); 中的p已经不再是以前的p了。。。。。  然后怎么解决呢? 我的同事的解决办法是自己定义了一个map,实时保存进度,发handler,然后实时更新...
    如果谁有好的解决办法提供下,非常感谢..
    
阅读(5819) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~