刚开始搞乱RxJava,所以我就是新手。
我对以下问题的正确方法或任何可能的解决方案有疑问。我在Google上搜索了很多,但我似乎没有找到任何合适的解决方案,只是一般的想法。
我有一个类可以完成一些工作并拥有自己的界面,让我们将其命名为 AClass 。现在有一个实现前面提到的接口的BClass。在 BClass 的 onActivityResult 上,如果requestCode与我们提供的请求代码匹配,则 AClass 调用 aClassInstance.handleActivityResult(.. )并做一些事情。然后它使用其界面报告。
有人会如何使用RxJava Observables来解决这个问题?
我目前唯一的尝试是将 handleActivityResult(..)转换为 Observable ,然后实现 Observer 接口并实例化覆盖在 BClass 的onActivityResult中的订阅对象,显然是 Activity 。但是我需要在实例化之前检查订阅是空还是取消订阅,这样结果只实例化订阅一次,然后Observer停止接收更多对象。
我还阅读了有关 RxBus 的实现。我不太确定这是否是一个好方法,因为它让我对主题有点困惑。
非常感谢您提供的任何见解。 :)
答案 0 :(得分:0)
我真的不知道你真正想要什么,但试着帮助你。 我告诉你了吗?当你的BClass的onActivityResult发生时,你的班级AClassInstance想知道吗?如果都是这样,你就不必实施" Ainterface"两个班级。你只需要听听" onActivityResult"会发生:
import rx.Observable;
public class ExampleObservers {
public static void main(String[] args) {
CallbackReceiver receiver = new CallbackReceiver();
ActivityProducer activity = new ActivityProducer();
activity.setListener(receiver);
activity.onActivityResult(444, 0);
}
}
class CallbackReceiver implements ActivityProducer.RequestCodeProducer {
@Override public void handleActivityResult(Observable<Integer> requestObservable) {
requestObservable.map(it -> {
System.out.println("here U can do some extra things with your " + it + " number ...");
return it;
}).subscribe(res -> System.out.println("Hello requestCode = " + res));
}
}
class ActivityProducer {
interface RequestCodeProducer {
void handleActivityResult(Observable<Integer> requestCode);
}
private RequestCodeProducer listener;
public void setListener(RequestCodeProducer listener) {
this.listener = listener;
}
/*
* . . . . . . .. .. . . .
* Your activity`s methods
* */
public void onActivityResult(int requestCode, int resultCode/*, Intent data*/) {
//super.onActivityResult();
Observable<Integer> observable = Observable.defer(() -> Observable.just(requestCode));
if (listener != null) {
listener.handleActivityResult(observable);
}
}
}
如果在IDE中运行此命令,您将看到输出&#34; Hello requestCode = 444&#34;。所以,一切正常,你得到回调。