我想通过广播接收器刷新我的片段UI

时间:2016-12-03 13:06:33

标签: java android broadcastreceiver fragment

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

                    }
                }
            }
        };

我试图让广播接收器成为一个外部类,但是我不能对片段做任何事情。当它是一个内部类时,广播接收器的代码没有任何反应。我已经回顾了很多类似的问题,但似乎没有什么能起作用。

因此,手头的问题是:当应用程序运行时互联网连接可用时,如何刷新活动内的片段?

1 个答案:

答案 0 :(得分:-1)

你的实施是错误的。您应该通过网络启动片段并请求,同时向用户显示ProgressBar或其他内容。如果Internet不可用,则以任何方式获得错误,然后向用户显示问题。另一方面,如果您成功获得响应,只需将数据设置为您的视图即可。顺便说一句,您找到网络可用性的方法无法保证“互联网”可用。