观察者在 activity 中被调用两次
observer gets called twice inside activity
在下面的代码中,我的观察者在将所有用户从参数存储到结果数组列表后被多次调用。我是观察模式的新手,所以我不确定我在这里做错了什么。
private lateinit var usersObserver: Observer<List<User?>?>
override fun onCreate(savedInstanceState: Bundle?) {
usersObservar = Observer {
userResults = populateResults(it)
}
}
private fun populateResults(users: List<User?>): MutableList<UserModel> {
val results: MutableList<UserModel> = ArrayList()
for (user in users) {
//Ignore potential null predictions
if ((user != null) &&user.isUserNotNull()) {
user.id?.let {
searchResultsViewModel.getUserById(it).observe(
this,
Observer { ud ->
if (ud != null && ud.hasNonNullLatLngOffsetMembers()) {
results.add(
UserModel(
name = user.placeId!!,
address = ud.address
displayed = false
)
)
}
}
)
}
}
}
return results
}
我假设您多次呼叫 popoulateResults()
。当您调用 searchResultsViewModel.getUserById(it).observe()
时,您会向它传递一个 Observer
的新实例,因此每次调用观察者时,都会执行观察者内部的代码。一个简单的解决方法应该是将观察者定义为 属性 函数之外的
val observer = Observer { your code }
并像
一样使用它
searchResultsViewModel.getUserById(it).observe(this, observer)
在下面的代码中,我的观察者在将所有用户从参数存储到结果数组列表后被多次调用。我是观察模式的新手,所以我不确定我在这里做错了什么。
private lateinit var usersObserver: Observer<List<User?>?>
override fun onCreate(savedInstanceState: Bundle?) {
usersObservar = Observer {
userResults = populateResults(it)
}
}
private fun populateResults(users: List<User?>): MutableList<UserModel> {
val results: MutableList<UserModel> = ArrayList()
for (user in users) {
//Ignore potential null predictions
if ((user != null) &&user.isUserNotNull()) {
user.id?.let {
searchResultsViewModel.getUserById(it).observe(
this,
Observer { ud ->
if (ud != null && ud.hasNonNullLatLngOffsetMembers()) {
results.add(
UserModel(
name = user.placeId!!,
address = ud.address
displayed = false
)
)
}
}
)
}
}
}
return results
}
我假设您多次呼叫 popoulateResults()
。当您调用 searchResultsViewModel.getUserById(it).observe()
时,您会向它传递一个 Observer
的新实例,因此每次调用观察者时,都会执行观察者内部的代码。一个简单的解决方法应该是将观察者定义为 属性 函数之外的
val observer = Observer { your code }
并像
一样使用它searchResultsViewModel.getUserById(it).observe(this, observer)