我有一个主活动,它包含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