3

私は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 の方法でどの機能を使用する必要があるのか​​ わかりません。助言がありますか?

ありがとう

4

2 に答える 2

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);
                    }
                });
            }
        });
于 2015-10-14T14:40:04.607 に答える
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]
}
于 2015-08-11T21:35:57.330 に答える