0

私のアプリケーションは、Gps が有効になっているかどうかを排他的に MainActivity でチェックします。そうでない場合は、DialogFragment が表示され、ユーザーを Android の位置情報設定に誘導します。

すべてのアクティビティにアクセスすると、ネットワーク/インターネット接続が確立されていない場合、またはネットワークに接続されていない場合でも、ダイアログが表示されます。

このチェックはすべてのアクティビティで必要なので、すべてのアクティビティに BaseActivity を実装し、onStart() にチェックを実装しました。

ユーザーが場所の設定の管理から戻ると、2 つ目の 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();
        }
    }

}

4

2 に答える 2

0

(onClick で) Wifi 設定に切り替える直前に、ダイアログを閉じることができます。

    @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();
    }

ダイアログが閉じられ、設定がポップアップ表示されます

于 2013-02-22T12:13:05.103 に答える
0

私はそれを解決しました。@Override public void onPause() { super.onPause(); を実装しました。this.dismiss(); } EnableInternetDialogFragment クラスで。正常に動作します

于 2013-03-12T16:19:14.837 に答える