如何从另一种方法取消 AlertDialogue?
How to Cancel a AlertDialogue from another method?
我有一个警报对话框,我希望它可以通过可运行的方法访问。目标是一旦达到某个标准就取消对话框。
下面是创建 AlertDialogue 的代码:
public void perm_dialogue()
{
final WifiManager wifiManager = (WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE);
LayoutInflater li = LayoutInflater.from(context);
View promptsView = li.inflate(R.layout.permission_wifi, null);
perm_prog = (ProgressBar)promptsView.findViewById(R.id.perm_progressBar);
perm_text = (TextView)promptsView.findViewById(R.id.perm_text);
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
context);
// set prompts.xml to alertdialog builder
alertDialogBuilder.setView(promptsView);
// set dialog message
alertDialogBuilder
.setCancelable(false)
.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
wifiManager.setWifiEnabled(true);
//call the delay function
handler1.post(DelayTask);
}
})
.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
// create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create();
// show it
alertDialog.show();
perm_prog.setVisibility(promptsView.INVISIBLE);
}
现在这是我用来制作 Runnable 的代码:
public Runnable DelayTask = new Runnable()
{
@Override
public void run()
{
final WifiManager wifiManager = (WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE);
//scanning loop for 10 secs
if(wifiManager.isWifiEnabled()==true)
{
//process
perm_prog.setVisibility(View.INVISIBLE);
//Close Alert Dialogue
//stopHandler();
handler1.removeCallbacks(this);
return;
}
else if(k==40)
{
//stopHandler();
handler1.removeCallbacks(this);
return;
}
else
{
perm_prog.setVisibility(View.VISIBLE);
perm_text.setText("Please Wait...");
}
k++;
handler1.postDelayed(DelayTask, 250);
}
};
现在在runnable中,我放置了一个Comment标签,指出我要调用AlertDialogue的取消函数的地方。
任何建议都会有所帮助!
谢谢!
您可以将 alertDialog 保留为全局变量,然后在有注释标记的地方调用 alertDialog.dismiss()。
尝试如下将AlertDialog作为成员变量
class MyActivity extends Activity{
AlertDialog alertDialog=null;
onCreate(-){
}
}
并按如下方式创建对话框
// create alert dialog
alertDialog = alertDialogBuilder.create();
然后在 activity 中的任意位置调用 dismiss() 作为
alertDialog.dismiss();
希望对您有所帮助。
我有一个警报对话框,我希望它可以通过可运行的方法访问。目标是一旦达到某个标准就取消对话框。
下面是创建 AlertDialogue 的代码:
public void perm_dialogue()
{
final WifiManager wifiManager = (WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE);
LayoutInflater li = LayoutInflater.from(context);
View promptsView = li.inflate(R.layout.permission_wifi, null);
perm_prog = (ProgressBar)promptsView.findViewById(R.id.perm_progressBar);
perm_text = (TextView)promptsView.findViewById(R.id.perm_text);
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
context);
// set prompts.xml to alertdialog builder
alertDialogBuilder.setView(promptsView);
// set dialog message
alertDialogBuilder
.setCancelable(false)
.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
wifiManager.setWifiEnabled(true);
//call the delay function
handler1.post(DelayTask);
}
})
.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
// create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create();
// show it
alertDialog.show();
perm_prog.setVisibility(promptsView.INVISIBLE);
}
现在这是我用来制作 Runnable 的代码:
public Runnable DelayTask = new Runnable()
{
@Override
public void run()
{
final WifiManager wifiManager = (WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE);
//scanning loop for 10 secs
if(wifiManager.isWifiEnabled()==true)
{
//process
perm_prog.setVisibility(View.INVISIBLE);
//Close Alert Dialogue
//stopHandler();
handler1.removeCallbacks(this);
return;
}
else if(k==40)
{
//stopHandler();
handler1.removeCallbacks(this);
return;
}
else
{
perm_prog.setVisibility(View.VISIBLE);
perm_text.setText("Please Wait...");
}
k++;
handler1.postDelayed(DelayTask, 250);
}
};
现在在runnable中,我放置了一个Comment标签,指出我要调用AlertDialogue的取消函数的地方。
任何建议都会有所帮助! 谢谢!
您可以将 alertDialog 保留为全局变量,然后在有注释标记的地方调用 alertDialog.dismiss()。
尝试如下将AlertDialog作为成员变量
class MyActivity extends Activity{
AlertDialog alertDialog=null;
onCreate(-){
}
}
并按如下方式创建对话框
// create alert dialog
alertDialog = alertDialogBuilder.create();
然后在 activity 中的任意位置调用 dismiss() 作为
alertDialog.dismiss();
希望对您有所帮助。