【问题标题】:How to display a ProgressDialog and dismiss it when finished doing a job完成工作后如何显示 ProgressDialog 并关闭它
【发布时间】:2021-07-10 08:11:06
【问题描述】:

我有一种方法可以收集大量数据,这会减慢我的应用程序(所有调用日志)的速度。我想要实现的是,在调用这个方法之前,它显示了一个ProgressDialog,这个我已经实现了。我无法做到的是,当该方法获取所有数据并将其显示在屏幕上时,它会关闭它。

对于这个方法,我使用Anko 库来调用异步方法。

这是我的代码:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = MyActivityBinding.inflate(layoutInflater)
    setContentView(binding.root)

    var pd = ProgressDialog(this)
    pd.show()
    pd.setContentView(R.layout.myCustomLoading)
    pd.window?.setBackgroundDrawableResource(R.color.transparent)
    pd.setCancelable(false)

    doAsync { //Anko library

        val myList = getData()  //This methood return a List<Model>
        binding.list.adapter = MyAdapter(this@MyActivity, myList)

    }

    pd.dismiss()
}

这段代码的问题是 ProgressDialog 没有显示,要在 RecyclerView 的屏幕上显示数据,我必须触摸屏幕或拖动它,这种情况很少见。

【问题讨论】:

  • 首先尝试将pd.show()移到pd.setCancelable(false)之后,调用show()后设置布局,所以此时没有要显示的内容。
  • 谢谢。我解决了这个问题,但仍然无法关闭我的 ProgressDialog 并且屏幕中显示的数据仍然存在问题:(
  • 尝试关闭 pd 并使用“doAsync”中的“uiThread {”更新适配器

标签: android kotlin progressdialog android-library


【解决方案1】:

pd.dismiss() 移动到异步块的底部。

但不要忘记在 UI 线程 activity.runOnUiThread { pd.dismiss() } 上运行它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    相关资源
    最近更新 更多