Android 为什么Dialogfragment会显示两次警报对话框?
我试图在互联网运行时显示一个警报对话框。一切正常,但对话框显示了两次(一次重叠)。为什么对话框会显示两次,即使在显示之前我正在检查对话框实例是否为空。下面是我编写的代码 下面是在活动中编写的代码Android 为什么Dialogfragment会显示两次警报对话框?,android,android-support-library,Android,Android Support Library,我试图在互联网运行时显示一个警报对话框。一切正常,但对话框显示了两次(一次重叠)。为什么对话框会显示两次,即使在显示之前我正在检查对话框实例是否为空。下面是我编写的代码 下面是在活动中编写的代码 BroadcastReceiver networkStateReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Co
BroadcastReceiver networkStateReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager cm =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
activeNetwork.isConnected();
if (isConnected) {
internetAvailable();
} else {
showNoInternetPopup();
}
}
};
protected abstract void internetAvailable();
protected void showNoInternetPopup() {
SimpleAlertDialog alertDialog = new SimpleAlertDialog();
alertDialog.show(getSupportFragmentManager(), "1001");
}
@Override
protected void onResume() {
super.onResume();
IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(networkStateReceiver, filter);
}
下面是扩展dialogFragment的dialog类
public class SimpleAlertDialog extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the Builder class for convenient dialog construction
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Your network seems to be unavailable")
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dismiss();
}
});
// Create the AlertDialog object and return it
return builder.create();
}
@Override
public void show(FragmentManager manager, String tag) {
if (manager.findFragmentByTag(tag) == null) {
super.show(manager, tag);
}
}
}我认为,问题在于你从操作系统获得双重回调。 记录它以进行双重验证。
如果确实如此,那么您需要自己处理弹出窗口,这样您就不会播放两次,将警报对话框保存为成员,然后对其调用isShown()。当然,如果其为空,则检查KC。通过在暂停时注销接收器解决了此问题。。愚蠢的我是的,我收到了双重回电,但为什么?如果(manager.findffragmentbytag(tag)==null){super.show(manager,tag);}它一经创建就不应该为null,我也在检查这个条件。原因是因为你注册了两次?在舱单上和活动上?或者只是操作系统问题,你需要在片段之前检查是否创建它。因为你创造了两个片段,但展示了一个。这是不好的做法,在那之前检查一下。