【问题标题】:I want to refresh my fragment UI through broadcast receiver我想通过广播接收器刷新我的片段 UI
【发布时间】:2016-12-03 21:18:15
【问题描述】:

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

private boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager
            = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return (activeNetworkInfo != null && activeNetworkInfo.isConnectedOrConnecting());
}

如果没有网络连接,则 Activity 会启动片段,但我已经做到了,因此在没有 Internet 连接的情况下什么都不会显示(因为我正在从在线数据库下载内容,所以什么都不会显示)。

我想实现一个广播接收器,当有可用的互联网连接时,它会以某种方式重新启动片段。到目前为止,我的主要活动中有一个广播接收器作为内部类:

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

                    }
                }
            }
        };

我试图让广播接收器成为一个外部类,但是我无法对片段做任何事情。当它是一个内部类时,广播接收器的代码不会发生任何事情。我已经查看了很多类似的问题,但似乎没有什么对我有用。

所以手头的问题是:当应用运行时互联网连接可用时,如何刷新 Activity 中的片段?

【问题讨论】:

  • 如果 Fragment 附加到 Hosting Activity,您不需要广播接收器,您可以通过 FragmentManager (v4 - getSupportFragmentManager) 获取您的 Fragment,只需调用一个方法通过强制转换来重绘 UI你的片段类型。即((MyFragment)getSupportFragmentManager.getFragmentByTag(fragmentTag)).updateUI(); - 语法可能略有错误.. 不在电脑前。
  • 请参考这个解决方案stackoverflow.com/questions/25215878/…
  • @sup4eli 谢谢,我会想办法解决的..

标签: java android broadcastreceiver fragment


【解决方案1】:

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

【讨论】:

  • 不同意实施,因为我们不了解整个应用程序的用途。其次,如果您认为@Mikas 方法不合适,请说明原因并提出改进建议。
  • 我已经告诉了原因!因为“网络的可用性不能保证”互联网“可用”。我只是建议了一个更好的实现!
  • 我指的是不同的实现来检查网络连接状态。
  • 在您真正提出请求并获得成功响应之前,任何事情都不会正确和准确地工作。这就是为什么人们会按照我的建议来实施应用程序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-28
  • 2020-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多