我有一个应用程序,用户提供一些数据.检查提供的数据是否有效后,应用程序应执行API调用,然后显示响应。用户可以多次使用。
更具体地说-假设,我们有一个编辑文本和按钮。用户在编辑文本中提供一些数据,然后单击button
。如果EditText
中提供的数据有效,则使用提供的数据执行API调用,并将其显示在TextView
中。ProgressBar
在button
中的setOnClickListener
内可见。在进行API调用、从ViewModel
观察LiveData
并将其显示在TextView
中之后,ProgressBar
被设置为INVISIBLE
。到目前为止,一切都按计划进行。现在,当用户决定稍微改变数据,并执行另一个API调用时,ProgressBar
不会显示。
按钮
myBinding.apiCall.setOnClickListener {
myBinding.TestProgressBar.visibility = View.VISIBLE
TestJob.start()
}
职位
private val TestJob: Job
get() = viewLifecycleOwner.lifecycleScope.launch(start = CoroutineStart.LAZY) {
TestVM.MakeApiCall()
TestVM.ApiResponse.observe(viewLifecycleOwner, Observer { apiresult ->
when (apiresult) {
is TestWrapper.Success -> {
myBinding.MyTextView.text = String.format(
getString(R.string.testString),
it
)
myBinding.TestProgressBar.visibility = View.INVISIBLE
}
is TestWrapper.Error -> {}
}
})
}
我试着在Observable
中创建一个delay
,然后出现了ProgressBar
。怎么可能,第一次出现后,但之后,它就不会出现了。
1条答案
按热度按时间zynd9foi1#
每次单击都将启动一个全新的协程,它将永远遵守ApiResponse *。
第二次单击时:
还有更多的话要说,但这是要点。