2016-12-15 9 views
0

アンドロイドのアクティビティでインターネット接続を確認しようとしています。ネットワークの現在の状態を返す `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

を却下した後、チェックを呼び出す必要があります。新しい断片。したがって、フラグメントを削除したときには復活しないでください。 – 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 { 
//.... 
} 
関連する問題