2016-12-28 1 views
0

다음 코드는 Observable.from()을 사용하여 목록에서 항목을 내 보냅니다. 각 항목에 대해 flatMap()의 maxConcurrent 값이 Observabledevide.connectForPolice()으로 수행됩니다. device.connectForPolice() 메서드는 현재 항목에 대해 여러 작업을 수행하고 결국 Observable.just()을 호출하여 다음 항목으로 이동합니다. 여기 코드는 다음과 같습니다버튼 클릭시 onNext() 강제 적용

mConnectingSubscription = Observable.from(mAdapter.getItems()) 
       .flatMap(device -> { 
        return device.connectForPolice(device.getName()); 
       }, 1) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .subscribe(new Subscriber<String>() { 
        @Override 
        public void onCompleted() {} 

        @Override 
        public void onError(Throwable e) {} 

        @Override 
        public void onNext(String s) { 
         if (s.contains("str")) { 
          mAdapter.removeItem(s); 
         } 
        } 
       }); 

이 코드를 실행하기 시작했을 때 화면에 버튼을 추가되며, 클릭시 나는 원래 Observable.from(mAdapter.getItems())에서 "힘"현재 항목 그래서 다음을 완료하는 데 싶습니다 목록의 항목이 체인을 통과 할 수 있습니다. 본질적으로 "건너 뛰기"또는 "마무리"버튼입니다. 이를 사건의 사슬에 통합시키는 가장 좋은 방법은 무엇입니까?

답변

0

달성하려는 정확한 동작에 따라 다릅니다. device.connectForPolice(device.getName())의 결과를 무시하기에 충분하면 솔루션은 사소한 것입니다. 이 스트림을이 건너 뛰기 버튼에 대한 클릭을 나타내는 다른 스트림과 병합하면 첫 번째 항목부터 하나만 가져옵니다.

.flatMap(device -> { 
    return device.connectForPolice(device.getName()) 
       .mergeWith(RxView.clicks(skipBtn).map(voidObject -> someString)) 
       .take(1); 
}, 1) 

그러나 계산이 복잡하여 사용자가 건너 뛸 때 인터럽트하려고한다고 생각합니다. 이 경우에는 제작자가 직접 작성하고 클릭을 수신해야 계산이 즉시 중단됩니다.