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的时候,进度条不显示,只有进度完成之后才突然显示全部的进度,也就是没有更新过程
...全文
765 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
鄙人姓胡 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更新进度条的操作,。

80,392

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧