我一直在实施一个对话框,该对话框会在应用程序打开后立即检查互联网连接(即onCreate())。但是,我将对话框代码移动到另一个类以保持MainActivity清洁。
我需要在每次用户点击重试时检查连接,如果互联网不存在则再次显示对话框,否则调用MainActivity类中的onRefresh()方法。
代码看起来像这样:
public static boolean showNoConnectionDialog(final Context c) {
if(checkConnectivity(c))
{
result = true;
return result;
}
else
{
AlertDialog.Builder b =new AlertDialog.Builder(c);
b.setTitle("No Connection");
b.setMessage("Cannot connect to the internet!");
b.setPositiveButton("Retry", new AlertDialog.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if(!checkConnectivity(c))
showNoConnectionDialog(c);
else
{
result = true;
}
}
});
b.setNegativeButton("Exit", new AlertDialog.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
((Activity)c).finish();
}
});
b.create().show();
}
return result;
}
private static Boolean checkConnectivity(Context c) {
ConnectivityManager cm = (ConnectivityManager) c.getSystemService(Context.CONNECTIVITY_SERVICE);
// test for internet connection
if (cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isAvailable() && cm.getActiveNetworkInfo().isConnected())
return true;
else
return false;
}
在MainActivity中,我尝试过:
if(DialogBoxes.showNoConnectionDialog(this)){
onRefresh();
}
但是,连接到互联网后单击“重试”按钮不会执行任何操作,因为" if"部分只检查一次。使用while而不是if会导致UI停止响应。
我该怎么办?
答案 0 :(得分:0)
首先在你的班级内部的任何方法之外宣布你的AlertDialog
:
AlertDialog dialog;
然后在你的正面按钮监听器内:
b.setPositiveButton("Retry", new AlertDialog.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if(!checkConnectivity(c))
dialog.show();
else
{
result = true;
}
}
});
dialog = b.create();
dialog.show();