将可观察对象插入到另一个可观察对象中
本文关键字:观察 对象 另一个 插入 | 更新日期: 2023-09-27 18:16:44
假设[伪]代码:
class MyActivity : Activity {
Observable<string> mainObl
void OnCreate(Bundle bundle) {
mainObl = Observable.Never<string>();
}
Disposable subscription;
void OnStart() {
subscription = mainObl.Subscribe(UpdateUiOnEvent);
}
void OnStop() {
subscription.Dispose();
}
// on click - start filling existing Observable with data from another source
void OnButtonClick() {
var tmpObl = Observale.just(1,2,3,4);
mainObl.WhatMethodHere(tmpObl); // <<<<<<<<<<<< see Q
}
}
广告问:
在上面的WhatMethodHere
中使用哪种方法来钩住mainble中的tmpObl。
或者如何开始从另一个来源(另一个可观察对象)注入现有的可观察数据?
=== update ===
警告:Rx Android
我问这个作为开始RX用户
但是正确回答了初始问题
要做到这一点,最简洁的方法是将所有内容保留在Observable空间中,而不是试图将事件和可观察代码混合在一起。假设您的按钮名为"button1",您可以使用以下[pseudo]代码实现:
class MyActivity : Activity {
IDisposable subscription;
void OnStart() {
subscription = Observable
// Adapt a delegate to the event signature and subscribe to the event (unsubscribing when subscription disposed)
.FromEventPattern<EventHandler,EventArgs>(handler => (s,e) => handler(e), handler => button1.TouchUpInside += handler, handler => button1.TouchUpInside -= handler)
// Emit a new observable containing the data "from another source"
.Select(args => Observable.Return("1", "2", "3", "4"))
// Dispose any subscription to the previous observable and subscribe to the new observable emitted from above
.Switch()
.Subscribe(UpdateUiOnEvent);
}
void OnStop() {
subscription.Dispose();
}
}
希望能有所帮助。
如果我想让你的代码保持和现在一样的结构,我会这样做:
class MyActivity
{
private Subject<IObservable<string>> mainObl;
private IDisposable subscription = null;
public void OnCreate()
{
mainObl = new Subject<IObservable<string>>();
}
public void OnStart()
{
subscription = mainObl.Merge().Subscribe(x =>
{
Console.WriteLine(x);
});
}
public void OnStop()
{
subscription.Dispose();
}
public void OnButtonClick()
{
var tmpObl = new [] { 1, 2, 3, 4 }
.Select(x => x.ToString())
.ToObservable();
mainObl.OnNext(tmpObl);
}
}
现在当你调用这个:
var ma = new MyActivity();
ma.OnCreate();
ma.OnStart();
ma.OnButtonClick();
…你得到这个:
<>之前123.4