本文出自: http://www.cnblogs.com/jdsjlzx/archive/2011/08/01/2123974.html
今天看到论坛上有人问这个。估计是要搞一个类似下载软件的东西吧。
所以就有了本篇,原理:
处理线程先给handler发消息,消息中包括进度信息,handler在去更改List的Adapter里面的信息,并通知List更新UI。
原理很简单,就直接上码了:
001 |
package
hol.test.listprogress;
|
003 |
import
java.util.ArrayList;
|
004 |
import
java.util.HashMap;
|
005 |
import
java.util.List;
|
007 |
import
android.app.Activity;
|
008 |
import
android.content.Context;
|
009 |
import
android.os.Bundle;
|
010 |
import
android.os.Handler;
|
011 |
import
android.os.Message;
|
012 |
import
android.view.LayoutInflater;
|
013 |
import
android.view.View;
|
014 |
import
android.view.ViewGroup;
|
015 |
import
android.widget.BaseAdapter;
|
016 |
import
android.widget.Button;
|
017 |
import
android.widget.ListView;
|
018 |
import
android.widget.ProgressBar;
|
019 |
import
android.widget.TextView;
|
021 |
public
class
TestListProgress extends
Activity {
|
022 |
private
Button testDo = null ;
|
023 |
private
ListView progressList = null ;
|
024 |
private
List<HashMap<String, Object>> list;
|
025 |
private
MyAdapter myAdapet;
|
026 |
private
MyHandler myHandler;
|
029 |
public
void
onCreate(Bundle savedInstanceState) {
|
030 |
super .onCreate(savedInstanceState);
|
031 |
setContentView(R.layout.main);
|
033 |
myHandler =
new
MyHandler();
|
040 |
private
void
findView() {
|
041 |
testDo = (Button) findViewById(R.id.btn_test);
|
042 |
progressList = (ListView) findViewById(R.id.lst_progress);
|
045 |
private
void
addListerner() {
|
046 |
testDo.setOnClickListener( new
ClickEvent());
|
049 |
private
void
initList() {
|
050 |
list =
new
ArrayList<HashMap<String, Object>>();
|
051 |
HashMap<String, Object> dataA =
new
HashMap<String, Object>();
|
052 |
HashMap<String, Object> dataB =
new
HashMap<String, Object>();
|
053 |
dataA.put( "title" ,
"dataA" );
|
054 |
dataA.put( "current" ,
0 );
|
056 |
dataB.put( "title" ,
"dataB" );
|
057 |
dataB.put( "current" ,
0 );
|
060 |
myAdapet =
new
MyAdapter(TestListProgress. this , list);
|
061 |
progressList.setAdapter(myAdapet);
|
066 |
class
UpdateRunnable implements
Runnable {
|
072 |
public
UpdateRunnable( int
id, int
delay, MyHandler handler) {
|
074 |
this .handler = handler;
|
081 |
while
(currentPos <= 100 ) {
|
082 |
Message msg = handler.obtainMessage();
|
085 |
msg.arg2 = currentPos;
|
086 |
currentPos = currentPos +
5 ;
|
090 |
}
catch
(InterruptedException e) {
|
100 |
class
MyHandler extends
Handler {
|
102 |
public
void
handleMessage(Message msg) {
|
107 |
int
current = msg.arg2;
|
108 |
updateProgress(id, current);
|
111 |
super .handleMessage(msg);
|
114 |
private
void
updateProgress( int
id, int
currentPos) {
|
115 |
HashMap<String, Object> dataTemp = list.get(id);
|
116 |
dataTemp.put( "current" , currentPos);
|
117 |
myAdapet.chargeProgress(id, dataTemp);
|
122 |
class
ClickEvent implements
View.OnClickListener {
|
125 |
public
void
onClick(View v) {
|
128 |
case
(R.id.btn_test):
|
129 |
new
Thread( new
UpdateRunnable( 0 ,
400 , myHandler)).start();
|
130 |
new
Thread( new
UpdateRunnable( 1 ,
200 , myHandler)).start();
|
131 |
System.out.println( "OnClick" );
|
139 |
class
MyAdapter extends
BaseAdapter {
|
141 |
List<HashMap<String, Object>> list;
|
142 |
LayoutInflater infl =
null ;
|
144 |
public
MyAdapter(Context context, List<HashMap<String, Object>> list) {
|
145 |
this .infl = (LayoutInflater) context
|
146 |
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
151 |
public
int
getCount() {
|
157 |
public
Object getItem( int
position) {
|
159 |
return
list.get(position);
|
163 |
public
long
getItemId( int
position) {
|
169 |
public
View getView( int
position, View convertView, ViewGroup parent) {
|
171 |
convertView = infl.inflate(R.layout.list_layout,
null );
|
172 |
ProgressBar progressBar = (ProgressBar) convertView
|
173 |
.findViewById(R.id.progress);
|
174 |
TextView titleView = (TextView) convertView
|
175 |
.findViewById(R.id.title);
|
177 |
HashMap<String, Object> detail = list.get(position);
|
178 |
String t = (String) detail.get( "title" );
|
179 |
titleView.setText(t);
|
180 |
int
progress = (Integer) detail.get( "current" );
|
181 |
progressBar.setProgress(progress);
|
186 |
public
void
chargeProgress( int
postion, HashMap<String, Object> detail) {
|
187 |
this .list.set(postion, detail);
|
189 |
notifyDataSetChanged();
|
MyAdapet 里面的 chargeProgress是在用来更新List里面的值。 |
Message里面arg1就是List中的第几个进度条,arg2就是这个进度条里面的当前应该有的进度。what暂时没什么意义,只是为了标识这类消息是用来更新进度条的。本例也只有这一类消息。 |
03 |
android:orientation = "horizontal"
|
04 |
android:layout_width = "fill_parent"
|
05 |
android:layout_height = "fill_parent" >
|
06 |
< TextView
android:id = "@+id/title"
|
07 |
android:layout_width = "wrap_content"
|
08 |
android:layout_height = "wrap_content"
|
09 |
android:text = "In list"
|
10 |
android:layout_marginRight = "5dip"
|
13 |
< ProgressBar
android:id = "@+id/progress"
|
14 |
android:layout_width = "wrap_content"
|
15 |
android:layout_height = "wrap_content"
|
16 |
style = "?android:attr/progressBarStyleHorizontal"
|
18 |
android:layout_weight = "1.0"
|
19 |
android:visibility = "visible"
|
02 |
android:orientation= "vertical"
|
03 |
android:layout_width= "fill_parent"
|
04 |
android:layout_height= "fill_parent"
|
07 |
android:layout_width= "fill_parent"
|
08 |
android:layout_height= "wrap_content"
|
09 |
android:text= "@string/hello"
|
11 |
<Button android:id= "@+id/btn_test"
|
12 |
android:layout_width= "fill_parent"
|
13 |
android:layout_height= "wrap_content"
|
14 |
android:text= "ListProgress"
|
16 |
<ListView android:id= "@+id/lst_progress"
|
17 |
android:layout_width= "fill_parent"
|
18 |
android:layout_height= "wrap_content"
|
19 |
android:layout_weight= "1.0"
|
分享到:
相关推荐
文件导出时进度条显示其导出的进度。利用委托和事件,使窗体避免造成假死状态。是理解进度条比较好的案例
winform 进度条 ProgressBar 带进度显示,带源码
百度网盘进度条显示下载进度源码.
利用afinal框架,实现同时下载多个文件,并已进度条显示下载进度
VBA实现进度条的显示 Sub Test() ' The UserForm1_Activate sub calls Main UserForm1.LabelProgress.Width = 0 UserForm1.Show End Sub Private Sub UserForm_activate() Call Main End Sub Sub Main() ' ...
这个demo主要介绍了带有进度条的APP的下载更新,点击notification就可以安装了
实现线程处理信息时,传出处理进度值,显示到进度条中。(以前不会,在网上找了程序改着用,但是代码过于冗余复杂。现在理解相关内容后自己写了一个浅显易懂的实现方法)
原创Matlab进度条在窗口任意位置显示可更新进度和标题-mywaitbar.m 该函数的调用格式为: ①h = mywaitbar 在窗口h_figure内的指定位置[x,y]创建一个进度为p,进度标题为title的进度条。p的值在[0,1]范围...
易语言自动更新-仿真进度条下载 易语言自动更新-仿真进度条下载
利用URLdownloadtofile 下载文件并显示进度条,下载百分比的例程,没有使用任何第三方控件,在delphi xe7下测试通过。
MFC文件复制 删除,进度条显示文件复制进度,同时显示百分比,用文件对话框选择文件,进度条颜色并改变,代码通俗易懂
文件下载带进度条的哦很实用
Java实现进度条 Java实现进度条 Java实现进度条 Java实现进度条 Java实现进度条
VC++写的下载文件显示进度条的程序
C#编程,在处理事务时使用进度条显示处理进度。模拟导入会员信息时显示导入进度。Form1类处理(模拟批量导入)产生会员信息数组。调用导入管理器ImportMgr类Work函数,实现批量导入会员信息,导入时显示导入进度,...
jQuery progressbar进度条插件提示进度条进度百分比数据
java FTP上传文件(进度条显示进度)
易语言源码求真进度条下载模块.rar
该例子,使用的C++语言中的MFC框架,来实现网络文件的下载,和进度条的显示,本示例只需输入下载文件的URL就可以实现下载
我们往往在做Android项目时,难免会遇到下载列表的制作,网上的五花八门,今天我就整理下.通过自定义View实现进度条,通过使用recyclerView+view实现下载列表进度条同步刷新