我有一個主活動,它包含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();
}
}
}
};
我試圖使廣播接收器的外部類,但我不能做任何事情的片段。當它是一個內部類,廣播接收機的代碼沒有任何反應。我已經回顧了很多類似的問題,但似乎沒有任何工作可以從我這裏得到。
因此,手頭的問題是:當應用程序運行時互聯網連接可用時,如何刷新活動中的片段?
如果片段連接到宿主活動,則不需要廣播接收器,您可以通過FragmentManager(v4-getSupportFragmentManager)獲取片段,並調用方法重新繪製UI,方法是轉換爲您的片段類型。 I.e'((MyFragment)getSupportFragmentManager.getFragmentByTag(fragmentTag))。updateUI();' - 語法可能稍微錯誤..不在電腦前。 –
請參閱此解決方案http://stackoverflow.com/questions/25215878/how-to-update-the-ui-of-activity-from-broadcastreceiver – sup4eli
@ sup4eli謝謝,我會試圖找出一些東西了.. – Mikas