关于更新UI的困惑 首先Handler是在主线程中定义的,然后在线程中可用使用这个Handler的变量来更新UI操作。也就是说,progressBar.setVisibility(View.VISIBLE);在点击的时候设置,然后是网络请求,网络请求是耗时操作,所以放在子线程中,这样不会阻塞主线程。但是子线程不能更新主线程的UI操作,所以有了Handler来帮忙。也就是说Handler在子线程里面调用,来通知主线程的UI更新操作。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我的想法是这样的,在你访问网络取回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(); } }}; 使用异步操作吧,把网络数据部分放到异步里,在点击按钮事件里先调用processbar的操作,然后启动异步,就ok了 按钮点击事件是UI线程,显示progressbar也是UI线程,是这样么 连接网络 取数据应该在子线程执行 执行完后调用handler.sendEmptyMessage(0x456); 来通知主线程的界面改变 建议看下关于AsyncTask的详解,http://blog.csdn.net/liuyiming_/article/details/7462139 Help-android apk-导入httpmime发生build error Android的SQLite不支持“中文表名”吗? 大家在进行耗时的操作时是如何停止线程? 如何获取多选ListView中选中的选中项,请高手赐教~ openGL ES前景如何? 求助,如何调试G-Sensor? 问个弱智的问题! eclipse如何设置打印的log到本地文件里,而不是在控制台 APP与网站同步更新的问题 求救android,新手! 关于phonegap调用已有数据库问题。 Android启动画面后台加载webview的问题!!!
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();
}
}};