2016-12-03 53 views
0

我有一個主活動,它包含1個片段。該片段負責繪製用戶界面,運行異步任務等。所有這些都需要互聯網連接。現在,當我第一次啓動我的應用我檢查是否有通過方法互聯網連接與否:我想通過廣播接收器刷新我的片段UI

private boolean isNetworkAvailable() { 
    ConnectivityManager connectivityManager 
      = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
    return (activeNetworkInfo != null && activeNetworkInfo.isConnectedOrConnecting()); 
} 

如果沒有網絡連接,在活動開始的片段,但我做了它,以便不一個互聯網連接什麼也沒有顯示(因爲我正在從在線數據庫下載內容)。

我想實現一個廣播接收器,當有互聯網連接可用時,它將以某種方式重啓片段。到目前爲止,我有一個廣播接收器作爲一個內部類,在我的主要活動:

private BroadcastReceiver myBroadcastReceiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(final Context context, final Intent intent) { 

       if (intent.getExtras() != null) { 
        final ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); 
        final NetworkInfo ni = connectivityManager.getActiveNetworkInfo(); 

        if (ni != null && ni.isConnectedOrConnecting()) { 
         Toast.makeText(context, "internet ++", Toast.LENGTH_LONG).show(); 

         //this is where the fragment needs to be somehow reinstantiated 

        } else if (intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, Boolean.FALSE)) { 
         Toast.makeText(context, "internet --", Toast.LENGTH_LONG).show(); 

        } 
       } 
      } 
     }; 

我試圖使廣播接收器的外部類,但我不能做任何事情的片段。當它是一個內部類,廣播接收機的代碼沒有任何反應。我已經回顧了很多類似的問題,但似乎沒有任何工作可以從我這裏得到。

因此,手頭的問題是:當應用程序運行時互聯網連接可用時,如何刷新活動中的片段?

+0

如果片段連接到宿主活動,則不需要廣播接收器,您可以通過FragmentManager(v4-getSupportFragmentManager)獲取片段,並調用方法重新繪製UI,方法是轉換爲您的片段類型。 I.e'((MyFragment)getSupportFragmentManager.getFragmentByTag(fragmentTag))。updateUI();' - 語法可能稍微錯誤..不在電腦前。 –

+0

請參閱此解決方案http://stackoverflow.com/questions/25215878/how-to-update-the-ui-of-activity-from-broadcastreceiver – sup4eli

+0

@ sup4eli謝謝,我會試圖找出一些東西了.. – Mikas

回答

-1

你的實現是錯誤的。你應該開始你的片段並通過網絡請求,同時向用戶顯示ProgressBar或其他內容。如果互聯網不可用,以任何方式,你會得到錯誤,然後向用戶顯示問題。另一方面,如果您成功獲得響應,請將您的數據設置爲您的視圖。順便說一句,您的網絡可用性的方法不能保證「Internet」可用。

+0

不同意實現,因爲我們沒有關於整個應用程序的全部內容。其次,如果您認爲@Mikas方法不合適,請說明原因並提出改進建議。 – sup4eli

+0

我已經告訴過爲什麼了!因爲「網絡的可用性不能保證」Internet「可用」。我只是建議更好的實施! – hadilq

+0

我的意思是檢查網絡連接狀態的不同實現。 – sup4eli