一种方法是使用主题。您可以公开
如何使用检测更改POJO模型?见样品
public class User {
String firstName;
String latsName;
}
和
public void main(){
User user = new User();
user.setFirstName("rasoul");
//detect change by rxJava or Rx android
}
我需要使用rxjava来检测更改模型用户
您需要使您的模型对更改具有可观察性。
public class User {
public interface ChangeListener {
void onChanged(User user);
}
private List<ChangeListener> changeListeners = new CopyOnWriteArrayList<>();
public void addChangeListener(ChangeListener listener) {
this.changeListeners.add(listener);
}
public void removeChangeListener(ChangeListener listener) {
this.changeListeners.remove(listener);
}
private String firstName;
private String lastName;
public void setFirstName(String firstName) {
this.firstName = firstName;
for(ChangeListener changeListener: changeListeners) {
changeListener.onChanged(this);
}
}
}
因为现在你可以观察到一个用户:
user.addChangeListener((u) -> {
// user changed
});
现在你可以很容易地将其包装为可观察的:
public class RxUser {
private RxUser() {}
public static Observable<User> observe(final User user) {
return Observable.create((emitter) -> {
final User.ChangeListener changeListener = (user) -> {
emitter.onNext(user);
}
emitter.setDisposable(Disposables.fromAction(() -> { user.removeChangeListener(listener); }));
user.addChangeListener(listener);
});
}
现在你可以做了
User u = new User();
Disposable disposable = RxUser.observe(u).subscribe((user) -> {
// will be called for changes
});
u.setFirstName("hello");
Subject
的底层Observer
并订阅它。要通知您的数据更改,只需调用Subject.onNext
,所有订阅方都将收到更新的数据。
你可以在这里阅读更多关于主题