我有一个主要活动,它包含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 :(得分:-1)
你的实施是错误的。您应该通过网络启动片段并请求,同时向用户显示ProgressBar或其他内容。如果Internet不可用,则以任何方式获得错误,然后向用户显示问题。另一方面,如果您成功获得响应,只需将数据设置为您的视图即可。顺便说一句,您找到网络可用性的方法无法保证“互联网”可用。