没有数据的RxJava2主题

没有数据的RxJava2主题,java,android,rx-java,rx-java2,Java,Android,Rx Java,Rx Java2,我必须倾听一些事件,这些事件可能发生在许多地方,如按钮点击、文本更改、活动回调等 我正在使用Subject触发此事件。但是我不想在这个事件中发送任何数据 我只需要通知你发生了什么事。是否有一个没有类型的主题 现在我正在创建一个主题的字符串 Subject<String> mSubject = PublishSubject.create(); 但是这个字符串值没有任何意义。我只需要触发一个没有任何数据的事件,就像Completablecompleted没有任何结果值一样 有

我必须倾听一些事件,这些事件可能发生在许多地方,如按钮点击、文本更改、活动回调等

我正在使用
Subject
触发此事件。但是我不想在这个事件中发送任何数据

我只需要通知你发生了什么事。是否有一个没有类型的
主题

现在我正在创建一个
主题
字符串

     Subject<String> mSubject = PublishSubject.create();
但是这个
字符串
值没有任何意义。我只需要触发一个没有任何数据的事件,就像
Completable
completed没有任何结果值一样

有没有办法做到这一点


我需要类似于
mSubject.trigger()

的东西,正如Hans评论的那样,您可以定义一个表示可忽略值的枚举:

enum ValueLessSignal {
    IGNORE_ME;
}

PublishSubject<ValueLessSignal> subject = PublishSubject.create();

subject.subscribe(ignore -> { System.out.println("Something happened"); })

subject.onNext(ValueLessSignal.IGNORE_ME);
enum valuelessignal{
别理我;
}
PublishSubject=PublishSubject.create();
subject.subscribe(忽略->{System.out.println(“发生了什么事”);})
subject.onNext(ValueLessSignal.IGNORE_ME);

您可以根据需要选择枚举及其单个实例的命名。

无法像在Completable with Subject中那样“直接触发”。如果您需要一个更有意义的对象,只需创建一个具有名称的特殊类的静态对象,并将其传递。但我认为这个主题的用法有问题。您可以将clickListener包装在按钮上,然后您将获得一个以“v”为值的可观察值。稍后,您可以使用此obserable并丢弃“v”。好的,但主题是此类用例的理想解决方案,对吗?好的,RxBinding库的功能是
Observable
s,用于发送更改事件的信号。最干净的解决方案是
merge()
那些
可观察的
s,而不是使用
Subject
s。但是,您必须处理异构元素类型。如果您不想麻烦,我演示的
主题
示例应该足够好了。
enum ValueLessSignal {
    IGNORE_ME;
}

PublishSubject<ValueLessSignal> subject = PublishSubject.create();

subject.subscribe(ignore -> { System.out.println("Something happened"); })

subject.onNext(ValueLessSignal.IGNORE_ME);