在片段适配器中,当前位置的片段和下一个片段被一个接一个地实例化。
在片段实现中:
lateinit var eventListObservable: Observable<List<EventModel>>
lateinit var eventListObserver: Observer<List<EventModel>>
包含在伴生对象中。它们链接到类而不是实例。
当将来的片段被创建时,它将设置可观测值,这将覆盖当前片段实例的值。
我的建议是:
class FakeEventService: IEventService{
private val observableCurrent = Observable.just(listOf(
EventModel(11, "Event Current 1"),
EventModel(12, "Event Current 2"),
EventModel(13, "Event ... 3"),
EventModel(14, "Event 4"),
EventModel(15, "Event 5"),
EventModel(16, "Event 6"),
EventModel(17, "Event 7")
).delay(1, TimeUnit.SECOND)
)
private val observableFuture = Observable.just(listOf(
EventModel(11, "Event Future 1"),
EventModel(12, "Event Future 2"),
EventModel(13, "Event Future 3"),
EventModel(14, "Event ... 4"),
EventModel(15, "Event 5"),
EventModel(16, "Event 6"),
EventModel(17, "Event 7")
).delay(1, TimeUnit.SECOND)
)
override fun getEvents(eventType: Int): Observable<List<EventModel>> {
return when(eventType){
EventType.CURRENT -> observableCurrent
EventType.FUTURE -> observableFuture
}
}
然后在你的片段中你可以移除你的可观察代码
var disposableSubscription: Disposable? = null
override fun onStart(){
super.onStart()
disposableSubscription = eventService.getEvents(eventType).subscribe{ events ->
eventList.addAll(t)
eventListAdapter.notifyDataSetChanged()
}
}
override onStop(){
super.onStop()
disposableSubscription?.dispose()
disposableSubscription = null
}