从 Observable 获取元素的索引
Getting the index of an element from an Observable
我开始学习 RxJava。我有一组视图,我想使用 ViewObservable.clicks()
为每个视图设置一个 OnClickListener
。 OnClickListener
的实现将只调用一个方法,该方法取决于视图在数组中的位置(例如:populate(viewPositionInTheArray)
)。
一个必要的解决方案是这个:
for (int i = 0; i < views.length; i++) {
final int finalI = i;
view[i].setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
populate(finalI);
}
});
}
为了使用 RxJava 做到这一点,我想我需要做一些流链接。但是,我不知道我必须以优雅的 FRP 方式使用哪些功能。有什么建议吗?
谢谢
这可行:
private void gotTheList() {
for (int i = 0; i < mViews.length; i++) {
setClick(mViews[i], i);
}
}
private void setClick(View item, int index) {
ViewObservable.clicks(item)
.subscribe(onClickEvent -> {
populate(index);
});
}
private void populate(int index) {
// do something on mViews[index]
}
这是我的尝试。当我需要通过可观察的变化来维护索引时,我通常使用范围运算符
Observable.range(0,views.length)
.subscribe(new Action1<Integer>() {
@Override
public void call(Integer integer) {
views[index].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
populate(index);
}
});
}
});
我开始学习 RxJava。我有一组视图,我想使用 ViewObservable.clicks()
为每个视图设置一个 OnClickListener
。 OnClickListener
的实现将只调用一个方法,该方法取决于视图在数组中的位置(例如:populate(viewPositionInTheArray)
)。
一个必要的解决方案是这个:
for (int i = 0; i < views.length; i++) {
final int finalI = i;
view[i].setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
populate(finalI);
}
});
}
为了使用 RxJava 做到这一点,我想我需要做一些流链接。但是,我不知道我必须以优雅的 FRP 方式使用哪些功能。有什么建议吗?
谢谢
这可行:
private void gotTheList() {
for (int i = 0; i < mViews.length; i++) {
setClick(mViews[i], i);
}
}
private void setClick(View item, int index) {
ViewObservable.clicks(item)
.subscribe(onClickEvent -> {
populate(index);
});
}
private void populate(int index) {
// do something on mViews[index]
}
这是我的尝试。当我需要通过可观察的变化来维护索引时,我通常使用范围运算符
Observable.range(0,views.length)
.subscribe(new Action1<Integer>() {
@Override
public void call(Integer integer) {
views[index].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
populate(index);
}
});
}
});