java - 活动没有足够快地暂停
问题描述
在我的 AppCompatActivity 中,我在特定事件中显示了一个 AlertDialog。
显示 AlertDialog 后,用户将无法再单击 AppCompatActivity 中的任何内容。
我试图禁用 onPause() 中的活动:getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
并检查它是否没有暂停:getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)
但似乎 onPause() 的调用速度不够快。
每当我暂停 AppCompatActivity 时,我可以将静态布尔值设置为 true,在 onResume() 中将其设置为 false 并在每个 onClickListener/onTouchListener 等中检查它,但是有更好的方法吗?
每一个帮助表示赞赏!
编辑: 感谢您的评论!我发现,当我在启动 UI 线程(用于打开 AlertDialog)时单击屏幕时,单击会被放入队列中。这就是在 AlertDialog 运行时执行 click 事件的原因。我是否需要保存 AlertDialog 并检查它是否正在运行或者是否有更好的方法?
解决方案
我相信您应该让我们更多地了解您的代码。不过,我想我可以猜到你在说什么。android中的每个视图组件都有一个setEnabled(false)
方法,如果您在视图组件java对象上调用它,它将被禁用并且不再可点击。因此,只要您想显示 AlertDialog,您就可以简单地禁用您的组件,然后setEnabled(true)
如果您愿意,可以通过调用再次启用它们。我很确定暂停活动不是你应该做的。因为手动进行,无论如何都不是最佳实践。
推荐阅读
- phoenix-framework - 在 Phoenix 1.4 中将 id/object 从一个页面/上下文传递到另一个页面/上下文
- ef-core-2.0 - 有没有办法让 Entity Framework Core 将所有 Guid 属性映射到没有注释的 nvarchar?
- android - 找不到 transform-api.jar (com.android.tools.build:transform-api:2.0.0-deprecated-use-gradle-api)
- c++ - 如果用户输入太多字符,则创建错误消息
- apache-spark - Pyspark dataframe Column 基于特定字符索引值的子字符串
- html - 将 div 和脚本转换为单个 iframe
- excel - 如何显示(或防止隐藏)从 PowerShell 创建的 Excel 工作表
- google-colaboratory - Can you hide code cell outputs in Google Colab?
- javascript - 如果请求成功,axios 错误响应返回 undefined
- c# - JSONException:type java.lang.String 无法转换为 JSONArray