android ProgressBar更新问题

程序媛儿 2011-01-28 08:30:30
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
progressBar = (ProgressBar)findViewById(R.id.progressBarID);
startButton = (Button)findViewById(R.id.startButtonID);
startButton.setOnClickListener(new ButtonClick());
progressBar.setMax(100);
progressBar.setVisibility(View.VISIBLE);

for(int i = 0;i<=100;i+=1){
progressBar.setProgress(i);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

为什么在创建Activity的时候,进度条不显示,只有进度完成之后才突然显示全部的进度,也就是没有更新过程
...全文
623 14 打赏 收藏 举报
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
鄙人姓胡 2011-01-29
你最好在onResume()方法中执行,onCreate() ——> onStart() ——> onResume(),这个过程是不会中断的
其次你得不断的更新Activity才能显示进度条的过程

用Handler.postDelay(runnable,100) 在线程中处理进度条的赋值操作
  • 打赏
  • 举报
回复
昕颖 2011-01-29
你另起一个线程.或者用handler去处理吧.你样做是堵塞在主UI主线程里面.当然得把所有的执行完才展示.ok
  • 打赏
  • 举报
回复
Nico 2011-01-29
是的,你放在handler里边去处理吧。
  • 打赏
  • 举报
回复
ameyume 2011-01-29
[Quote=引用 13 楼 aquan12345678 的回复:]
发送handler也不行呀,就是这段代码http://topic.csdn.net/u/20110129/20/8cd206d8-90f2-4f34-8f35-13425795ac29.html?31870
[/Quote]
已经解决,新起一个线程执行download操作以免阻塞主线程,在handler中更新ui
  • 打赏
  • 举报
回复
程序媛儿 2011-01-29
大神们,求解释啊,是不是UI线程中不能对progressbar进行更新呀
  • 打赏
  • 举报
回复
程序媛儿 2011-01-29
您好,您能不能具体解释下呢,小弟跪求了,大神能不能试试用一个按钮触发这个循环事件,让进度条不断前进呢
  • 打赏
  • 举报
回复
程序媛儿 2011-01-29
发送handler也不行呀,就是这段代码http://topic.csdn.net/u/20110129/20/8cd206d8-90f2-4f34-8f35-13425795ac29.html?31870
  • 打赏
  • 举报
回复
ameyume 2011-01-29
楼上几位都说了原因,你那样会阻塞主线程,可以分析下你的按钮点击代码
startButton.setOnClickListener(new ButtonClick());
progressBar.setMax(100);
progressBar.setVisibility(View.VISIBLE);

for(int i = 0;i<=100;i+=1){
progressBar.setProgress(i);
try {
// 需要执行完此处的睡眠,整个循环都执行完才能结束点击事件更新UI,这时候进度条已经到100%,
// 就是你说的效果,要解决可以按钮楼上的方法,用handler再此处发消息,执行更新UI的操作
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

  • 打赏
  • 举报
回复
妖怪 2011-01-29
用thread或者handler来做更新吧
  • 打赏
  • 举报
回复
cdab1986 2011-01-29


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
progressBar = (ProgressBar)findViewById(R.id.pro);
startButton = (Button)findViewById(R.id.btn);

progressBar.setMax(100);

startButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new Thread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
for(int i = 0;i<=100;i+=1){
Message m = new Message();
m.what = 1;
Bundle bundle = new Bundle();
bundle.putInt("pre", i);
m.setData(bundle);
myhandler.sendMessage(m);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}).start();


}
});
}

Handler myhandler = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
if(msg.what == 1){
progressBar.setProgress(msg.getData().getInt("pre"));
}
}
};

  • 打赏
  • 举报
回复
ameyume 2011-01-28
1. AsyncTask用法实例 用AsyncTask更新进度条ProgressBar(防止UI线程阻塞)
http://bbs.ldci.com.cn/read.php?tid-12959.html

2.使用Handler更新
Android ProgressBar的使用
http://dev.firnow.com/course/3_program/java/javajs/20100719/455082.html
  • 打赏
  • 举报
回复
程序媛儿 2011-01-28
可是为什么我用按钮触发这个事件也没有用啊,就是要么就不显示,一显示就显示全部的进度
  • 打赏
  • 举报
回复
ameyume 2011-01-28
或者用handler更新进度条也可以。
  • 打赏
  • 举报
回复
ameyume 2011-01-28
哥们,你没有理解activity的生命周期,在onCreate函数执行完时还不能显示画面,只有onStart函数执行完才能显示画面,onResume函数执行完后,activity位于最上层,变成可交互。
你可以启动一个新线程,在run中执行每隔100ms更新进度条的操作,。
  • 打赏
  • 举报
回复
发帖
Android
加入

7.9w+

社区成员

移动平台 Android
社区管理员
  • Android
  • yechaoa
  • 失落夏天
申请成为管理员
帖子事件
创建了帖子
2011-01-28 08:30
社区公告
暂无公告