kotlin 第二次点击按钮后,ProgressBar不会显示,该按钮提供API调用响应

sdnqo3pr  于 2023-10-23  发布在  Kotlin
关注(0)|答案(1)|浏览(147)

我有一个应用程序,用户提供一些数据.检查提供的数据是否有效后,应用程序应执行API调用,然后显示响应。用户可以多次使用。
更具体地说-假设,我们有一个编辑文本和按钮。用户在编辑文本中提供一些数据,然后单击button。如果EditText中提供的数据有效,则使用提供的数据执行API调用,并将其显示在TextView中。
ProgressBarbutton中的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。怎么可能,第一次出现后,但之后,它就不会出现了。

zynd9foi

zynd9foi1#

每次单击都将启动一个全新的协程,它将永远遵守ApiResponse *。
第二次单击时:

  • 显示进度条
  • 您启动API调用
  • API响应中的值仍然是上一次调用的成功。
  • 你开始观察成功的结果。
  • 你隐藏进度条
  • 第二次调用的结果更新UI。

还有更多的话要说,但这是要点。

相关问题