1
私はviewpager
を作成し、fragment
はRecyclerView
& viewholder
を持っています。なぜObservable.interval()は登録を解除できませんか?
@Override
public void bindModel(GankInfo item) {
super.bindModel(item);
picViewPager.setOnTouchListener(((v, event) -> {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:{
stopPlay();
break;
}
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:{
startPlay();
break;
}
}
return false;
}));
}
@Override
public void onAttach() {
super.onAttach();
startPlay();
}
@Override
public void onDetach() {
super.onDetach();
stopPlay();
}
private void stopPlay(){
subscription.unsubscribe();
}
private void startPlay(){
subscription =
Observable.interval(3, TimeUnit.SECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(aLong -> {
int currentPosition = picViewPager.getCurrentItem();
currentPosition++;
picViewPager.setCurrentItem(currentPosition==picViewPager.getAdapter().getCount()?0:currentPosition);
});
}
Iフラグメントと、メモリリークを見つけるためLeakcanary
を使用します。ビューページをスワイプすると、フラグメントがメモリをリークします。私はadapter.onViewDetachedFromWindow
でこれを止めると、リークキャナリーはいつも何度も通知します。私は私の問題を解決するためにいくつかの方法をGoogleにしようとするが、それらは動作しません。ここでは:あなたが二回startPlay
を呼び出す誤っている場合
ですが、 'CompositeSubscription'は使用できません。 'subscriprion.add()' – ilumer