为什么android中在dialog中调用progressDialog不用如方法同时加载
//自定义dialogpublicvoiddialog2(){dialog=newAlertDialog.Builder(this).setIcon(R.drawable...
// 自定义dialog public void dialog2() {
dialog = new AlertDialog.Builder(this)
.setIcon(R.drawable.ic_launcher).setTitle("导入联系人")
.setMessage("是否导入联系人?")
.setPositiveButton("导入手机中联系人", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//progressDialog = ProgressDialog.show(daoru.this, "Loading...", "Please wait...");
initProgressDialog();
}
}).setNegativeButton("导入Sim卡中联系人", new OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
arg0.cancel();
// TODO Auto-generated method stub
try {
//sim卡中获取;
GetSimContact();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).create();
dialog.show();
}
private void initProgressDialog() {
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("加载中....");
progressDialog.show();
mHandler.postDelayed(runnable, 200);
}
private Runnable runnable = new Runnable() {
public void run() {
try {
getContact();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mHandler.sendEmptyMessage(1);
}
};
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
if (progressDialog != null)
progressDialog.dismiss();
break;
}
}
}; 展开
dialog = new AlertDialog.Builder(this)
.setIcon(R.drawable.ic_launcher).setTitle("导入联系人")
.setMessage("是否导入联系人?")
.setPositiveButton("导入手机中联系人", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//progressDialog = ProgressDialog.show(daoru.this, "Loading...", "Please wait...");
initProgressDialog();
}
}).setNegativeButton("导入Sim卡中联系人", new OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
arg0.cancel();
// TODO Auto-generated method stub
try {
//sim卡中获取;
GetSimContact();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).create();
dialog.show();
}
private void initProgressDialog() {
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("加载中....");
progressDialog.show();
mHandler.postDelayed(runnable, 200);
}
private Runnable runnable = new Runnable() {
public void run() {
try {
getContact();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mHandler.sendEmptyMessage(1);
}
};
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
if (progressDialog != null)
progressDialog.dismiss();
break;
}
}
}; 展开
展开全部
private void initProgressDialog() {
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("加载中....");
progressDialog.show();
mHandler.postDelayed(runnable, 200);
}
这个方法本身有问题,android系统有一个主线程叫UI主线程,任何在UI主线程上进行较长时间得数据的交互都会导致UI线程堵塞,即有图像卡顿的现象。
mHandler.postDelayed(runnable, 200);这句话就是指在200毫秒后进行runnable的run方法,而这个方法会在UI主线程上进行,progressDialog转圈还没来得及显示就被这方法给堵塞了,所以会出现你的说那种状况。
解决方法有几种,可以用异步机制,或者消息机制(就好像你这种)。
用消息机制的话 ,mHandler.postDelayed(runnable, 200);这句话就不能要,改为:
Thread t = new Thread(runnable);
t.start();
异步机制就自己上网搜搜吧。
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("加载中....");
progressDialog.show();
mHandler.postDelayed(runnable, 200);
}
这个方法本身有问题,android系统有一个主线程叫UI主线程,任何在UI主线程上进行较长时间得数据的交互都会导致UI线程堵塞,即有图像卡顿的现象。
mHandler.postDelayed(runnable, 200);这句话就是指在200毫秒后进行runnable的run方法,而这个方法会在UI主线程上进行,progressDialog转圈还没来得及显示就被这方法给堵塞了,所以会出现你的说那种状况。
解决方法有几种,可以用异步机制,或者消息机制(就好像你这种)。
用消息机制的话 ,mHandler.postDelayed(runnable, 200);这句话就不能要,改为:
Thread t = new Thread(runnable);
t.start();
异步机制就自己上网搜搜吧。
展开全部
你想说啥?
//progressDialog = ProgressDialog.show(daoru.this, "Loading...", "Please wait...");
initProgressDialog();
这两句不用同时用?
如果是问这个,那答案很简单了,因为两者是一样的,没必要重复,都是显示一个提示框,然后开启线程加载联系人
//progressDialog = ProgressDialog.show(daoru.this, "Loading...", "Please wait...");
initProgressDialog();
这两句不用同时用?
如果是问这个,那答案很简单了,因为两者是一样的,没必要重复,都是显示一个提示框,然后开启线程加载联系人
追问
调用
initProgressDialog(); 时我想让这个方法里的
private void initProgressDialog() {
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("加载中....");
progressDialog.show();
mHandler.postDelayed(runnable, 200);
}
progressDialog转圈在调用getContact();方法,现在是这个方法getContact();执行完后才显示转圈的,他俩没同步
追答
你把handler里面的内容写到try catch的finally语句里面,这样不管
getContact();的结果如何都会执行dismiss。
你说的先执行 getContact();我也不好解释,因为就程序逻辑来看是木有问题的,我有个类似的demo,直接将线程写在onclick方法里面了,大概是这样的,你再试试。
.setPositiveButton("导入手机中联系人", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//progressDialog = ProgressDialog.show(daoru.this, "Loading...", "Please wait...");
new Thread(){
public void run()
{
try
{
getContact();
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
m_dialog.dismiss();
}
}
}.start();
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
// 方式一:new Dialog
final ProgressDialog dialog = new ProgressDialog(this);
dialog.show();
// 方式二:使用静态方式创建并显示,这种进度条只能是圆形条,设置title和Message提示内容
ProgressDialog dialog2 = ProgressDialog.show(this, "提示", "正在登陆中");
// 方式三 使用静态方式创建并显示,这种进度条只能是圆形条,这里最后一个参数boolean indeterminate设置是否是不明确的状态
ProgressDialog dialog3 = ProgressDialog
.show(this, "提示", "正在登陆中", false);
// 方式四 使用静态方式创建并显示,这种进度条只能是圆形条,这里最后一个参数boolean cancelable 设置是否进度条是可以取消的
ProgressDialog dialog4 = ProgressDialog.show(this, "提示", "正在登陆中",
false, true);
// 方式五 使用静态方式创建并显示,这种进度条只能是圆形条,这里最后一个参数 DialogInterface.OnCancelListener
// cancelListener用于监听进度条被取消
ProgressDialog dialog5 = ProgressDialog.show(this, "提示", "正在登陆中", true,
true, cancelListener);
final ProgressDialog dialog = new ProgressDialog(this);
dialog.show();
// 方式二:使用静态方式创建并显示,这种进度条只能是圆形条,设置title和Message提示内容
ProgressDialog dialog2 = ProgressDialog.show(this, "提示", "正在登陆中");
// 方式三 使用静态方式创建并显示,这种进度条只能是圆形条,这里最后一个参数boolean indeterminate设置是否是不明确的状态
ProgressDialog dialog3 = ProgressDialog
.show(this, "提示", "正在登陆中", false);
// 方式四 使用静态方式创建并显示,这种进度条只能是圆形条,这里最后一个参数boolean cancelable 设置是否进度条是可以取消的
ProgressDialog dialog4 = ProgressDialog.show(this, "提示", "正在登陆中",
false, true);
// 方式五 使用静态方式创建并显示,这种进度条只能是圆形条,这里最后一个参数 DialogInterface.OnCancelListener
// cancelListener用于监听进度条被取消
ProgressDialog dialog5 = ProgressDialog.show(this, "提示", "正在登陆中", true,
true, cancelListener);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询