取消在Base Activity类中实例化的DialogFragment

时间:2013-02-22 12:06:10

标签: android android-dialogfragment

如果启用了Gps,我的应用程序会立即检查MainActivity。如果不是,则会出现一个DialogFragment,引导用户进入Android位置设置。

在访问所有活动时,如果未建立网络/互联网连接,甚至连接到网络,则会显示对话框。

由于在所有活动中都需要进行此检查,因此我已为所有活动实施了BaseActivity,并在onStart()中实施了检查。

当用户从管理位置设置返回时,会出现第二个EnableInternetDialogFragment。第一个(未解决的)对话框仍然可见

我目前的解决方案是在onPause()方法中关闭对话框,但这根本不起作用。

有没有办法避免/管理这种行为?

public abstract class BaseActivity extends FragmentActivity {

    protected ConnectivityTester connectivityTester;
    protected ConnectivityHelper connectivityHelper;

    protected EnableInternetDialogFragment enableInternetDialogFragment;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        connectivityTester = new ConnectivityTester();
        connectivityHelper = new ConnectivityHelper();
    }

    @Override
    protected void onStart() {
        super.onStart();
        final boolean internetEnabled = connectivityTester.isInternetEnabled(getApplicationContext());
        if (!internetEnabled) {
            enableInternetDialogFragment = new EnableInternetDialogFragment();
            enableInternetDialogFragment.show(getSupportFragmentManager(), "enableInternetDialog");
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        if (enableInternetDialogFragment.getDialog() != null) {
            enableInternetDialogFragment.dismissAllowingStateLoss();
        }
    }


    public final class EnableInternetDialogFragment extends DialogFragment {

        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            return new AlertDialog.Builder(getActivity())
                .setTitle("Activite Network/Internet")
                .setMessage("test")
                .setPositiveButton("Activate Internet", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        connectivityHelper.enableMobileInternetSettings(getApplicationContext());
                    }
                })
                .setNegativeButton("Activate WiFi", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        connectivityHelper.enableWiFiSettings(getApplicationContext());
                    }
                }).create();
        }
    }

}

2 个答案:

答案 0 :(得分:0)

您可以在切换到Wifi设置(在onClick上)之前解除对话:

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        return new AlertDialog.Builder(getActivity())
            .setTitle("Activite Network/Internet")
            .setMessage("test")
            .setPositiveButton("Activate Internet", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                    connectivityHelper.enableMobileInternetSettings(getApplicationContext());
                }
            })
            .setNegativeButton("Activate WiFi", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                    connectivityHelper.enableWiFiSettings(getApplicationContext());
                }
            }).create();
    }

对话框将被解除,然后会弹出设置

答案 1 :(得分:0)

我解决了。我实现了@Override public void onPause(){super.onPause(); this.dismiss();在EnableInternetDialogFragment类中。 工作正常