关于更新UI的困惑

knife_s 2015-01-03 05:31:19
楼主从win32和WEB转过来的,有个问题困惑了
由于楼主的程序需要访问网络取回JSON数据显示,所以在activity上面放了一个ProgressBar,不可见状态
我的想法,点击查询,马上显示ProgressBar,取回数据后,隐藏ProgressBar
代码如下

private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
if(msg.what==0x123)
{
progressBar.setVisibility(View.VISIBLE);
}
else {
progressBar.setVisibility(View.INVISIBLE);
}
}};



按纽点击事件

handler.sendEmptyMessage(0x123);
连接网络,取回数据并显示
handler.sendEmptyMessage(0x456);


但是,实际的结果是,当连接网络,取回数据完成后,才把ProgressBar显示出来再隐藏

似乎就是按纽点击事件在执行完成之前,UI是不更新的,求教
...全文
189 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
水的川 2015-01-04
  • 打赏
  • 举报
回复
建议看下关于AsyncTask的详解,http://blog.csdn.net/liuyiming_/article/details/7462139
小林望北 2015-01-04
  • 打赏
  • 举报
回复
按钮点击事件是UI线程,显示progressbar也是UI线程,是这样么
Trent1985 2015-01-04
  • 打赏
  • 举报
回复
使用异步操作吧,把网络数据部分放到异步里,在点击按钮事件里先调用processbar的操作,然后启动异步,就ok了
Jing丶無雙 2015-01-04
  • 打赏
  • 举报
回复
我的想法是这样的,在你访问网络取回JSON数据前执行下面代码,显示进度框
	private ProgressDialog pd;
/**
	 * 设置进度框
	 */
	private void setProgressDialog(String str) {
		pd = new ProgressDialog(ConfirmActivity.this);
		pd.setMessage(str);
		// 设置对话框能用"取消"按钮关闭
		pd.setCancelable(false);
		// 设置对话框显示样式
		pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
		// 设置对话框的进度条显示
		pd.setIndeterminate(true);
		pd.show();
	}
取回数据后,在Handler中再释放掉进度框
private Handler handler = new Handler(){  
    @Override  
   public void handleMessage(Message msg) {            
            if(msg.what==0x123)
            {
               pd.dismiss();
            }
   }};
zbzbhahae 2015-01-04
  • 打赏
  • 举报
回复
连接网络 取数据应该在子线程执行 执行完后调用handler.sendEmptyMessage(0x456); 来通知主线程的界面改变
_xianfeng99 2015-01-03
  • 打赏
  • 举报
回复
首先Handler是在主线程中定义的,然后在线程中可用使用这个Handler的变量来更新UI操作。 也就是说,progressBar.setVisibility(View.VISIBLE);在点击的时候设置,然后是网络请求,网络请求是耗时操作,所以放在子线程中,这样不会阻塞主线程。但是子线程不能更新主线程的UI操作,所以有了Handler来帮忙。也就是说Handler在子线程里面调用,来通知主线程的UI更新操作。

80,351

社区成员

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

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