2013-02-22 56 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