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

Java 我想通过广播接收器刷新我的片段UI,java,android,broadcastreceiver,fragment,Java,Android,Broadcastreceiver,Fragment,我有一个主活动,它包含一个片段。片段负责绘制UI、运行异步任务等。所有这些都需要internet连接。现在,当我第一次启动应用程序时,我会通过以下方法检查是否存在互联网连接: private boolean isNetworkAvailable() { ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVI

我有一个主活动,它包含一个片段。片段负责绘制UI、运行异步任务等。所有这些都需要internet连接。现在,当我第一次启动应用程序时,我会通过以下方法检查是否存在互联网连接:

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();

                    }
                }
            }
        };
我试着把广播接收器做成一个外部类,但是我不能对片段做任何事情。。当它是一个内部类时,来自广播接收器的代码不会发生任何变化。我已经复习了很多类似的问题,但我似乎什么都做不到


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

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

如果片段连接到托管活动,您不需要广播接收器,您可以通过FragmentManager(v4-getSupportFragmentManager)获取片段只需调用一个方法,通过强制转换到片段类型来重新绘制UI。即
((MyFragment)getSupportFragmentManager.getFragmentByTag(fragmentTag)).updateUI()-语法可能稍有错误。。不要在电脑前使用。请参考此解决方案@sup4eli谢谢,我会尝试找出一些解决方案。不同意实施,因为我们不了解整个应用程序的用途。其次,如果你认为@Mikas方法不合适,请说明原因,并提出改进建议。我已经告诉过了原因!因为“网络的可用性并不保证“互联网”是可用的”。我只是建议了一个更好的实现!我的意思是检查网络连接状态的不同实现。在您真正发出请求并获得成功响应之前,任何操作都不会正确、准确地工作。这就是为什么人们像我建议的那样实施应用程序。