【问题】
对于Android程序
Songtaste歌曲下载器
来说,已经实现了基本的下载功能了:
【已解决】Android中利用HttpClient等库实现网络文件下载
并且已经实现了hook函数,用于及时获得对应的下载进度:
【已解决】Android(Java)中如何实现函数回调(类似于传递函数指针)
现在接着去实现,添加对应的进度条,及时显示下载的进度。
1.看到了,本身的Graphical Layout中,就有对应的进度条:
所以手动拖动一个进去。
2.发现默认是Normal的,所以又去掉,换成对应的Horizontal的:
3.然后就是想办法,如何和代码关联起来了。
参考:
【详解】Android ProgressBar ProgressDialog 进度条 进度条对话框
去添加配置:
<TableRow android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" > <ProgressBar android:id="@+id/pgbDownload" style="?android:attr/progressBarStyleHorizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:max="100" android:progress="0" android:layout_gravity="center_vertical" /> </TableRow>
以及添加代码:
int percent = (int)((currentSize * 100) / totalSize); pgbDownload = (ProgressBar) findViewById(R.id.pgbDownload); pgbDownload.setProgress(percent);
结果发现没效果,虽然设置了值了,但是没显示。
4.还是去看官网解释:
http://developer.android.com/intl/zh-CN/reference/android/widget/ProgressBar.html
结果官网中代码,貌似也是直接设置setProgress就可以了的。
后来参考:
才注意到,自己上述的findViewById,是放在每次调用的地方了。
应该放到初始化才对。。。
5.但是,结果还是无法实现即时更新,虽然调试都确保了,的确是每次进度更新,会调用到setProgress的。
关于进度条不更新,而只能在最后突然更新到100%的问题,详见:
【已解决】Android中的进度条,虽然设置了setProgress但是也不更新,直到最后完成时,突然更新为100%
6.后来又折腾:
【已解决】Android中在新线程中调用Toast.makeText导致程序崩溃
最后终于可以正常,添加了进度条,可以正常更新:
更新完毕最后,可以提示下载完毕:
【总结】
总的来说,Android下面的开发,还是比较麻烦的。很多常见的控件,都不能完整的封装,都还是需要另外注意很多事情,才能正常工作的。
至少对于VS2010中的C#开发,还是麻烦多了。
转载请注明:在路上 » 【已解决】给Android程序添加进度条(ProgressBar)