2013-02-22 55 views
0

如果启用了Gps,我的应用程序将独占地检查MainActivity。如果没有出现会引导用户进入Android位置设置的DialogFragment。关闭在基本活动类中实例化的DialogFragment

在访问所有活动时,如果没有建立网络/互联网连接或者甚至连接到网络,将出现一个对话框。

由于此检查在所有活动中都是必需的,因此我已为所有活动实施了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(); 
     } 
    } 

}

回答

0

我解决了它。我已经实现@Override public void onPause(){super.onPause(); this.dismiss(); }在EnableInternetDialogFragment类中。 Works fine

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

对话框被随后解雇的设置,会弹出

+0

感谢您的快速回复。在调用_MainActivity_之前调用_BaseActivity_作为抽象类。所以GPS-DialogFragment在Internet-DialogFragment之后被调用。 Internet-DialogFragment显示在后台。您必须先管理Gps对话框,然后再返回到第二次调用Internet-Dialog的MainActivity。 – Kody 2013-02-22 15:51:09

+0

Oki,但是你可以做同样的GPS对话框(在启动GPS设置前关闭它)? – 2013-02-22 15:56:42

+0

当然,但在_MainActivity_重新进入时,_BaseActivity_被再次调用。第一个_InternetDialogFragment_尚未解除。但是现在显示了第二个_InternetDialogFragment_。 - > 1.)BaseActivity调用_InternetDialogFragment_ 2.)MainActivity调用_GpsDialogFragment_ - > _GpsDialogFragment_位于顶部3.)用户调用Android的GpsSettings 4)用户返回到MainActivity,隐式调用BaseActivity - >调用第二个_InternetDialogFragment_。 – Kody 2013-02-23 08:49:31