从Observable获取元素的索引

时间:2015-06-14 23:40:03

标签: android rx-java frp rx-android

我开始学习RxJava。我有一组视图,我想使用OnClickListener为每个视图设置ViewObservable.clicks()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方式使用哪些功能。有什么建议吗?

由于

2 个答案:

答案 0 :(得分:1)

这可行:

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]
}

答案 1 :(得分:1)

这是我的捅。当我需要通过可观察的变化来维护索引时,我会使用范围运算符

 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);
                    }
                });
            }
        });