2016-12-03 46 views
0

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

如果片段连接到宿主活动,则不需要广播接收器,您可以通过FragmentManager(v4-getSupportFragmentManager)获取片段,并调用方法重新绘制UI,方法是转换为您的片段类型。 I.e'((MyFragment)getSupportFragmentManager.getFragmentByTag(fragmentTag))。updateUI();' - 语法可能稍微错误..不在电脑前。 –

+0

请参阅此解决方案http://stackoverflow.com/questions/25215878/how-to-update-the-ui-of-activity-from-broadcastreceiver – sup4eli

+0

@ sup4eli谢谢,我会试图找出一些东西了.. – Mikas

回答

-1

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

+0

不同意实现,因为我们没有关于整个应用程序的全部内容。其次,如果您认为@Mikas方法不合适,请说明原因并提出改进建议。 – sup4eli

+0

我已经告诉过为什么了!因为“网络的可用性不能保证”Internet“可用”。我只是建议更好的实施! – hadilq

+0

我的意思是检查网络连接状态的不同实现。 – sup4eli