第二次点击提供API调用响应的按钮后,进度条不会显示

问题描述 投票:0回答:1

我有一个应用程序,用户可以在其中提供一些数据。检查提供的数据是否有效后,应用程序应执行 api 调用,然后显示响应。用户可以多次执行。

更具体地说 - 假设我们有一个编辑文本和按钮。用户在编辑文本中提供一些数据,然后单击

button
。如果
EditText
中提供的数据有效,则使用提供的数据执行 api 调用,并将其显示在
TextView
中。

ProgressBar
setOnClickListener
中的
button
内可见。进行api调用后,从
LiveData 
观察
ViewModel
,并将其显示在
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 -> {}
                }
            })
        }

我尝试在

delay
中制作一个
Observable
,然后
ProgressBar
出现了。怎么可能,第一次出现之后,就不再出现了。

android kotlin user-interface mvvm android-livedata
1个回答
0
投票

每次点击,您都会启动全新的协程,它将永远观察 ApiResponse*。

第二次点击时:

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

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

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.