无法关闭 Android ProgressDialog
Cannot dismiss Android ProgressDialog
我的 class
中有一个名为 dialog 的静态 ProgressDialog 对象
dialog = new ProgressDialog(this);
这段代码被执行
buildGroupAccessDialog(groupName);
dialog.show(c, "Joining", "Please wait...");
涉及的方法有这些
private void builGroupAccessDialog(final String groupName){
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
// set title
alertDialogBuilder.setTitle("Join group");
// set dialog message
alertDialogBuilder
.setMessage("Do you want to join " + groupName + " ?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//join group
joinGroup(groupName);
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
}).create()
.show();
}
joinGroup() 被调用:
private void joinGroup(final String groupName) {
Log.d("TRY TO JOIN GROUP:", groupName);
new Thread(new Runnable() {
@Override
public void run() {
//Get the device
WifiP2pDevice dev = mRecyclerViewFragment.getDeviceMap().get(groupName);
WifiP2pConfig config = new WifiP2pConfig();
config.deviceAddress = dev.deviceAddress;
wifip2pManager.connect(wifiDirectChannel, config, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
Log.d("CONNECT", "SUCCESS");
// This is used for avoiding registering another BroadcastListener on purpose, keeping only one but responding
// to intent only when I'm sure I want it
iWantToConnect = true;
// Hide progress dialog
dialog.dismiss();
}
@Override
public void onFailure(int reason) {
Log.d("CONNECT", "FAILURE");
//Toast.makeText(getApplication(), "PIPPO", Toast.LENGTH_LONG);
}
});
}
}).start();
}
我有两个问题:
请注意,我说的是 对话框 变量
1) 进度对话框在不等待用户 AlertDialog 响应的情况下启动(如何使其同步?)
2) 进度对话框未关闭(为什么?)
谢谢
编辑: 我以这种方式更改了我的代码:
buildGroupAccessDialog(groupName);
和:
private void joinGroup(final String groupName) {
Log.d("TRY TO JOIN GROUP:", groupName);
dialog.show(this, "Joining", "Please wait...");
new Thread(new Runnable() {
@Override
public void run() {
//Get the device
WifiP2pDevice dev = mRecyclerViewFragment.getDeviceMap().get(groupName);
WifiP2pConfig config = new WifiP2pConfig();
config.deviceAddress = dev.deviceAddress;
wifip2pManager.connect(wifiDirectChannel, config, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
Log.d("CONNECT", "SUCCESS");
// This is used for avoiding registering another BroadcastListener on purpose, keeping only one but responding
// to intent only when I'm sure I want it
iWantToConnect = true;
// Togli il dialog di progress
dialog.dismiss();
}
@Override
public void onFailure(int reason) {
Log.d("CONNECT", "FAILURE");
//Toast.makeText(getApplication(), "PIPPO", Toast.LENGTH_LONG);
// Togli il dialog di progress
//dialog.dismiss();
// show failure to the user VANNO MESSI NEL BROIASCASTRECEIVER
// refresh peer list
}
});
}
}).start();
}
private void buildGroupAccessDialog(final String groupName) {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
this);
// set title
alertDialogBuilder.setTitle("Join group");
// set dialog message
alertDialogBuilder
.setMessage("Do you want to join " + groupName + " ?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//join group
joinGroup(groupName);
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
}).create()
.show();
}
现在问题 1) 已解决,但我仍然无法关闭对话框。
有什么想法吗?
你必须像这样在外面声明你的对话框:
AlertDialog dialog;
private void builGroupAccessDialog(final String groupName){
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
// set title
alertDialogBuilder.setTitle("Join group");
// set dialog message
alertDialogBuilder
.setMessage("Do you want to join " + groupName + " ?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//join group
dialog.show() //Show dialog here
joinGroup(groupName);
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
dialog = alertDialogBuilder.create(); //Changed here
}
希望对您有所帮助。
要关闭对话框,请在 joinGroup(groupName);
之后添加 dialog.dismiss();
语句
.setPositiveButton(
"Yes", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int id) {
//join group
joinGroup(groupName);
// Add this line
dialog.dismiss();
}
})
与 setNegativeButton
相同
这将关闭您的对话框。
如果您询问有关 alertDialog 的信息,请尝试以下操作:
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
alertDialogBuilder.dismiss();
}
});
希望对您有所帮助:)
我终于解决了问题;查看 ProgressDialog 参考,我注意到 show 是一个静态方法。所以我更换了
dialog = new ProgressDialog(this)
dialog.show(c, "Joining", "Please wait...");
有
dialog = ProgressDialog.show(this,"Joining", "Please wait...", false, true);
这样后续
dialog.dismiss()
按预期工作。感谢您的所有建议。
我的 class
中有一个名为 dialog 的静态 ProgressDialog 对象dialog = new ProgressDialog(this);
这段代码被执行
buildGroupAccessDialog(groupName);
dialog.show(c, "Joining", "Please wait...");
涉及的方法有这些
private void builGroupAccessDialog(final String groupName){
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
// set title
alertDialogBuilder.setTitle("Join group");
// set dialog message
alertDialogBuilder
.setMessage("Do you want to join " + groupName + " ?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//join group
joinGroup(groupName);
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
}).create()
.show();
}
joinGroup() 被调用:
private void joinGroup(final String groupName) {
Log.d("TRY TO JOIN GROUP:", groupName);
new Thread(new Runnable() {
@Override
public void run() {
//Get the device
WifiP2pDevice dev = mRecyclerViewFragment.getDeviceMap().get(groupName);
WifiP2pConfig config = new WifiP2pConfig();
config.deviceAddress = dev.deviceAddress;
wifip2pManager.connect(wifiDirectChannel, config, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
Log.d("CONNECT", "SUCCESS");
// This is used for avoiding registering another BroadcastListener on purpose, keeping only one but responding
// to intent only when I'm sure I want it
iWantToConnect = true;
// Hide progress dialog
dialog.dismiss();
}
@Override
public void onFailure(int reason) {
Log.d("CONNECT", "FAILURE");
//Toast.makeText(getApplication(), "PIPPO", Toast.LENGTH_LONG);
}
});
}
}).start();
}
我有两个问题:
请注意,我说的是 对话框 变量
1) 进度对话框在不等待用户 AlertDialog 响应的情况下启动(如何使其同步?)
2) 进度对话框未关闭(为什么?)
谢谢
编辑: 我以这种方式更改了我的代码:
buildGroupAccessDialog(groupName);
和:
private void joinGroup(final String groupName) {
Log.d("TRY TO JOIN GROUP:", groupName);
dialog.show(this, "Joining", "Please wait...");
new Thread(new Runnable() {
@Override
public void run() {
//Get the device
WifiP2pDevice dev = mRecyclerViewFragment.getDeviceMap().get(groupName);
WifiP2pConfig config = new WifiP2pConfig();
config.deviceAddress = dev.deviceAddress;
wifip2pManager.connect(wifiDirectChannel, config, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
Log.d("CONNECT", "SUCCESS");
// This is used for avoiding registering another BroadcastListener on purpose, keeping only one but responding
// to intent only when I'm sure I want it
iWantToConnect = true;
// Togli il dialog di progress
dialog.dismiss();
}
@Override
public void onFailure(int reason) {
Log.d("CONNECT", "FAILURE");
//Toast.makeText(getApplication(), "PIPPO", Toast.LENGTH_LONG);
// Togli il dialog di progress
//dialog.dismiss();
// show failure to the user VANNO MESSI NEL BROIASCASTRECEIVER
// refresh peer list
}
});
}
}).start();
}
private void buildGroupAccessDialog(final String groupName) {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
this);
// set title
alertDialogBuilder.setTitle("Join group");
// set dialog message
alertDialogBuilder
.setMessage("Do you want to join " + groupName + " ?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//join group
joinGroup(groupName);
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
}).create()
.show();
}
现在问题 1) 已解决,但我仍然无法关闭对话框。 有什么想法吗?
你必须像这样在外面声明你的对话框:
AlertDialog dialog;
private void builGroupAccessDialog(final String groupName){
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
// set title
alertDialogBuilder.setTitle("Join group");
// set dialog message
alertDialogBuilder
.setMessage("Do you want to join " + groupName + " ?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//join group
dialog.show() //Show dialog here
joinGroup(groupName);
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
dialog = alertDialogBuilder.create(); //Changed here
}
希望对您有所帮助。
要关闭对话框,请在 joinGroup(groupName);
dialog.dismiss();
语句
.setPositiveButton(
"Yes", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int id) {
//join group
joinGroup(groupName);
// Add this line
dialog.dismiss();
}
})
与 setNegativeButton
相同这将关闭您的对话框。
如果您询问有关 alertDialog 的信息,请尝试以下操作:
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
alertDialogBuilder.dismiss();
}
});
希望对您有所帮助:)
我终于解决了问题;查看 ProgressDialog 参考,我注意到 show 是一个静态方法。所以我更换了
dialog = new ProgressDialog(this)
dialog.show(c, "Joining", "Please wait...");
有
dialog = ProgressDialog.show(this,"Joining", "Please wait...", false, true);
这样后续
dialog.dismiss()
按预期工作。感谢您的所有建议。