gpt4 book ai didi

android - 监听事件以触发另一个类 (Rx) 中的方法

转载 作者:太空狗 更新时间:2023-10-29 16:33:14 24 4
gpt4 key购买 nike

对 RxJava/RxAndroid 来说非常新,但我认为由于 Rx 经常用于事件处理,也许这是一个尝试的好情况。

我有一个自定义 View ,它在自定义 View 类中使用 Runnable 来处理长按点击:

    final Handler handler = new Handler();
Runnable longPressed = new Runnable() {
public void run() {
//Call method in this views Activity here.
}
};

然后,当此事件被触发并调用 run() 时,我想调用 Activity 中的方法。使用 Rx 调用 Activity 中的方法可以是一个干净的解决方案吗?这将如何使用 RxJava/RxAndroid 完成?

最佳答案

您可以为此简单地创建一个监听器接口(interface)。

public interface ViewUpdateListner{
void update();
}

然后调用这个:

 final Handler handler = new Handler();
Runnable longPressed = new Runnable() {
public void run() {
updateListner.update();
}
};

在 Activity 中设置 Listner,就像点击按钮一样。

view.setOnViewUpdateListner(this);

现在如果你想为此使用 Rx,那么你可以简单地将你的监听器包装在你的自定义 View 类中。喜欢

 public static Observable<ViewUpdateEvent> viewUpdateEvents(View view) {
return Observable.create(new ViewUpdateEventOnSubscribe(view));
}

final class ViewUpdateEventOnSubscribe implements Observable.OnSubscribe<ViewUpdateEvent> {
final View view;

ViewUpdateEventOnSubscribe (View view) {
this.view = view;
}

@Override public void call(final Subscriber<? super ViewUpdateEvent> subscriber) {
ViewUpdateListnerlistner listner= new ViewUpdateListner() {
@Override
public void update() {
if (!subscriber.isUnsubscribed()) {
subscriber.onNext(new ViewUpdateEvent());
}
}
};
view.setOnViewUpdateListner(listner);
}
}

然后您可以在您的 Activity 中使用它,例如:

viewUpdateEvents(view)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<ViewUpdateEvent>() {
@Override
public void onCompleted() {

}

@Override
public void onError(Throwable e) {

}

@Override
public void onNext(ViewUpdateEvent update) {

};)

关于android - 监听事件以触发另一个类 (Rx) 中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34672560/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com