嗨,我的活动必须使用套接字接收一个对象..
此活动在片段 A 和片段 B 内。
我希望每次活动接收对象时,将其发送到片段 A。
我能怎么做?
嗨,我的活动必须使用套接字接收一个对象..
此活动在片段 A 和片段 B 内。
我希望每次活动接收对象时,将其发送到片段 A。
我能怎么做?
我认为这是一个完美的例子,说明事件总线非常方便。查看Square 的 Otto。如果您创建事件总线并使其可用于您的活动和片段(通过静态类或使用依赖注入),您可以通过总线发送 myObject 而无需序列化它。
这是一些示例代码。首先,我在 OttoBus.java 中创建一个可静态访问的全局事件总线。这是我们将在活动和片段之间来回传递消息的总线。在活动中,我假设您将拥有某种从套接字接收数据的方法。接收到的数据将被放入一个 SocketDataReceivedEvent 对象并在总线上发送。在您的片段中,您在片段启动时在总线上注册片段,并在片段停止时取消注册(以避免泄漏)。Fragment 还必须具有处理 SocketDataReceivedEvent 的方法。这个方法可以任意命名,只要它带有 @Subscribe 注释并接受一个 SocketDataReceivedEvent 作为它的唯一参数。
---- OttoBus.java
import com.squareup.otto.Bus;
public class OttoBus {
private static Bus bus = new Bus();
public static void register(Object o) {
bus.register(o);
}
public static void post(Object data) {
bus.post(data);
}
public static void unregister(Object o) {
bus.unregister(o);
}
}
---- SocketDataReceivedEvent.java
public class SocketDataReceivedEvent {
public Object data;
public SocketDataReceivedEvent(Object data) {
this.data = data;
}
}
---- YourActivty.java
public class YourActivity extends Activity {
public void receiveSomethingOnSocket(Object theDataYouReceived) {
OttoBus.send(new SocketDataReceivedEvent(theDataYouReceived));
}
}
---- YourFragment.java
public class YourFragment extends Fragment {
@Override
public void onStart() {
super.onStart();
OttoBus.register(this);
}
@Override
public void onStop() {
super.onStop();
OttoBus.unregister(this);
}
@Subscribe
public void onSocketData(final SocketDataReceivedEvent e) {
// do something with e.data
}
}