本来说好更新关于AndroidPN的文章的,但是由于....,先更新下关于Listview条目下载的问题。
看图说话:
大概就是这样一个效果,有一个BUG【代码里面未解决】:就是这样虽然是可以下载,也能实时移除下载后的条目,没啥崩溃,但是刷新后其它的条目的进度就没了,或者说错乱了。 主要是因为代码里面是这样实现的:DEMO下载地址:
-
@SuppressLint({ "ViewHolder", "InflateParams", "SdCardPath" })
-
@Override
-
public View getView(int position, View contentView, ViewGroup parent)
-
{
-
// TODO Auto-generated method stub
-
final Item item = list.get(position);
-
LinearLayout layout = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.ite,null);
-
Button b = (Button) layout.findViewById(R.id.b);
-
final ProgressBar p = (ProgressBar) layout.findViewById(R.id.p1);
-
// 这里就是验证刷新后的对象的地址
-
System.out.println(p);
-
b.setText(item.getName());
-
b.setOnClickListener(new OnClickListener()
-
{
-
-
@Override
-
public void onClick(View v)
-
{
-
// TODO Auto-generated method stub
-
final MultiThreadDownload tastk0 = new MultiThreadDownload(item.getUrl(), "/sdcard/"+item+".png", 3);
-
tastk0.setDownThreadListenner(new MultiThreadDownloadListenner()
-
{
-
@Override
-
public void onSuccess()
-
{
-
// Do not like this.
-
// list.remove(item);
-
Message m = hd.obtainMessage();
-
m.obj = item;
-
///< 这里发hanler去删除条目,不能在这里直接删除;如果出现同时删除的话会崩溃的,而使用Handler是有顺序的,避免了崩溃
-
hd.sendMessage(m);
-
}
-
-
@Override
-
public void onProgress(long bytes, float percent)
-
{
-
p.setProgress((int) (100*percent));
-
///< 实时更新数据库的下载信息【目的就是显示进度,可以优化为两次更新一次】
-
}
-
});
-
new Thread(new Runnable()
-
{
-
@Override
-
public void run()
-
{
-
tastk0.start();
-
}
-
}).start();
-
}
-
});
-
return layout;
-
}
所以可以看到,如果一旦刷新的话,原来的对象的地址是变化了,也就是说你的
p.setProgress((int) (100*percent)); 中的p已经不再是以前的p了。。。。。 然后怎么解决呢? 我的同事的解决办法是自己定义了一个map,实时保存进度,发handler,然后实时更新...
如果谁有好的解决办法提供下,非常感谢..
阅读(5918) | 评论(0) | 转发(0) |