我是RxJava的初学者。
我想跟踪Int
变量的变化,并在变化时对其做出反应。
以下是我的例子:
class MainActivity : AppCompatActivity() {
lateinit var button: Button
var counter: Int = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val observable :Observable<Int> = Observable.just(counter)
button = findViewById(R.id.button)
button.setOnClickListener(View.OnClickListener {
counter++
})
observable.subscribe(
Consumer { t ->
Log.d("fromObservable", counter.toString()) }
)
}
}
}
但是,单击按钮时,Log永远不会调用。 如何使用RxJava2正确使用它?
答案 0 :(得分:1)
您创建了一个只发出一个元素的简单observable,但您可以使用Subject
作为用例:
class MainActivity : AppCompatActivity() {
lateinit var button: Button
var counter: Int = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val subject: BehaviorSubject<Int> = BehaviorSubject.createDefault(counter)
val observable: Observable<Int> = subject.hide()
button = findViewById(R.id.button)
button.setOnClickListener(View.OnClickListener {
subject.onNext(++counter)
})
observable.subscribe(
Consumer { t ->
Log.d("fromObservable", counter.toString()) }
)
}
}
}
答案 1 :(得分:1)
您没有正确创建.ideavimrc
。
Observable
将创建一个Observable.just(counter)
,其值为Observable
并完成。 Documentation of Observable.just()
您可以使用counter
Subject
来做您想做的事情。 Documentation of Subject
BehaviorSubject