我正在使用 BroadcastReceiver 来监控互联网连接的可能变化:
public class NetworkChangeReceiver extends BroadcastReceiver
现在,我需要分别检查 ViewPager 中的每个 fragment 。因为如果用户建立连接,那么这将分别反射(reflect)在每个 fragment 的 UI 上。
如果我假设一次创建的 fragment 的最大数量是三个,那么我的问题是:
为每个 fragment 定义一个 NetworkChangeReceiver 实例以单独工作是否危险,或者我应该只定义一个?
最佳答案
您可以简单地将观察者模式
结构应用于您的问题。
首先,您需要定义一个必须由 Fragment 观察到的内部类。
我将粘贴一些代码 fragment 来说明如何应用。
这是 NetworkChangeReceiver
和 NetworkObservable
类。
public class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, final Intent intent) {
Log.d("NetworkChangeReceiver","Connection status changed");
getObservable().connectionChanged();
}
public static class NetworkObservable extends Observable{
private static NetworkObservable instance = null;
private NetworkObservable() {
// Exist to defeat instantiation.
}
public void connectionChanged(){
setChanged();
notifyObservers();
}
public static NetworkObservable getInstance(){
if(instance == null){
instance = new NetworkObservable();
}
return instance;
}
}
public static NetworkObservable getObservable() {
return NetworkObservable.getInstance();
}
}
此外,您需要为广播接收器设置您的 list 。方法如下:
<receiver android:name="com.your.package.name.NetworkChangeReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
</intent-filter>
</receiver>
每当您的连接发生变化时,onReceive
方法都会被隐式调用。因此,您需要调用一个通知所有观察者的方法。
对于您的情况,观察者将是 Fragment
类。
我将粘贴另一个代码块来显示示例观察者类。
/*
* If you have memory concerns,
* you need to add your observer while application is resuming
* you need to remove that observer object while application is pausing...
*
*/
public class FirstFragment extends Fragment implements Observer{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onPause() {
super.onPause();
NetworkChangeReceiver.getObservable().deleteObserver(this);
}
@Override
public void onResume() {
super.onResume();
NetworkChangeReceiver.getObservable().addObserver(this);
}
@Override
public void update(Observable observable, Object data) {
// Whenever connection changes, this method will be called so edit your text here
}
}
您还可以通过向 notiftyObservers()
方法添加任何参数来传递网络状态。
希望这可能有所帮助。
关于android - 在 Android 的许多 fragment 中监控互联网连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21480802/