2016-12-15 76 views
0

我想檢查互聯網連接上的活動在android中。我有一個`ConnectivityReceiver'類,它返回網絡的當前狀態,並返回捕獲網絡變化時的狀態。檢查互聯網連接和顯示互聯網連接錯誤使用片段(底部表)

我在activity上使用這個類的方法。我想要的是,只要方法返回沒有互聯網連接,BottomSheetDialogFragment應顯示'重試'button。在按button時,Bottom Sheets dialog必須關閉,activity需要重新開始,並且應該再次檢查互聯網。基本上,每次我關閉Bottom Sheets dialog後,它應該檢查互聯網。

互聯網連接類工作正常,我檢查了它使用日誌,它每次檢查Network State是否有。問題出在dialog。每次關閉dialog時,它都會在不檢查互聯網的情況下恢復activity

NoInternetConnectivity.java - 擴展'BottomSheetDialogFragment'類的類。

MainActivity.java

public class MainActivity extends AppCompatActivity{ 
    final BottomSheetDialogFragment internetConnectivitySheet = NoInternetConnectivity 
      .newInstance("New Internet Connectivity Bottom Sheet"); 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // Manually checking internet connection 
     checkConnection(); 
    } 

    /** 
    * Method to check connection on activity resume 
    */ 
    @Override 
    protected void onResume(){ 
     Log.d(LOG_TAG, "onResume()"); 
     MyApplication.getInstance().setConnectivityListener(this); 
     checkConnection(); 
     super.onResume(); 
    } 

    /** 
    * Method to check internet connection in activity. 
    */ 
    private void checkConnection() { 
     Log.d("Check Connection called", "CHECKING CONNECTION..."); 
     if(!internetConnectivitySheet.isAdded() && !ConnectivityReceiver.isConnected()){ 
      internetConnectivitySheet.show(getSupportFragmentManager(), 
        internetConnectivitySheet.getTag()); 
     } else if (internetConnectivitySheet.isAdded()) { 
      internetConnectivitySheet.dismiss(); 
     } else { 
      //internet is connected :-) 
     } 
    } 

    /** 
    * Callback will be triggered when there is change in 
    * network connection 
    */ 
    @Override 
    public void onNetworkConnectionChanged(boolean isConnected) { 
     Log.d("On Network Change Called", "CHECKING CONNECTION..."); 
     if(!internetConnectivitySheet.isAdded() && !isConnected){ 
      internetConnectivitySheet.show(getSupportFragmentManager(), 
        internetConnectivitySheet.getTag()); 
     } else if (internetConnectivitySheet.isVisible()) { 
      internetConnectivitySheet.dismiss(); 
     } else { 
      //internet is connected :-) 
     } 
    }  
} 

在檢查日誌,當我關閉dialog,活動沒有得到恢復。發生了什麼,以及如何解決這個問題?

+1

你的活動不應該被暫停後致電檢查一個新的片段。因此,當你刪除你的片段時,你不應該得到onResume。 – Distwo

+1

您需要通過設置BottomSheetBehavior.BottomSheetCallback並在此時調用checkConnection()來檢測底部表單對話狀態何時發生更改。 – Distwo

+0

@Distwo是的,我明白了。我沒有收到活動恢復的日誌,所以我相信活動不會恢復,這就是發生這種情況的原因。你能幫助你怎麼做你說的嗎? –

回答

0

如果你想在你的活動中擁有暫停/恢復流程,你可以創建一個自定義對話框而不是片段,我認爲這是一個乾淨的解決方案。有它很多帖子How to create a Custom Dialog box in android? https://developer.android.com/guide/topics/ui/dialogs.html

但是,如果你想保持目前的實現,你只需要添加時需要解聘片段

public void onNetworkConnectionChanged(boolean isConnected) { 
//... 
    } else if (internetConnectivitySheet.isVisible()) { 
     internetConnectivitySheet.dismiss(); 
    checkConnection(); 
    } else { 
//.... 
}