如何在其onCreate方法中取消或关闭自定义对话框?

问题描述 投票:5回答:2

我创建了一个自定义对话框MyCustomDialog,该对话框扩展了Dialog。我创建并显示我的自定义对话框,如下所示:

new MyCustomDialog(myContext).show();

我重写Dialog.onCreate(Bundle savedInstanceState)方法来进行初始化。我还检查此方法是否满足特定条件,如果没有,我想关闭/取消对话框。我尝试在对话框的cancel()dismiss()方法中调用onCreate(Bundle savedInstanceState)onStart()方法,但是它没有任何效果。

任何人都知道在显示之前如何取消或关闭对话框(从对话框内部)?

android android-dialog
2个回答
3
投票

您应放置逻辑以确定对话框是否显示在onCreate()方法之外。它不属于那里。

或者,将您的show()方法重命名为showIfRequired()(或其他名称),然后在其中添加条件显示逻辑。

我知道这从技术上讲不能回答您的问题,但是您试图做的不是正确的设计。这是一件好事,因为以正确的方式做实际上更简单。

此外,请注意,您应该使用DialogFragment代替Dialog。在v4支持库中可用。


1
投票

这是针对10级及以下的API:

首先,您应该重写Activity类中的onCreateDialog(int id,Bundle args),这是您在做什么吗?对话框始终创建并显示为活动的一部分。其次,我认为您无法在onCreateDialog中取消/关闭对话框,因为在调用onCreateDialog时实际上尚未创建该对话框。也就是说,您无法取消/关闭尚未创建的内容。您可以尝试改写onPrepareDialog()并检查取消/关闭该对话框。到那时,对话框实际上应该已经创建了(只是不显示),所以如果您在那儿调用cancel / dismiss,就可以防止它被显示。

onPrepareDialog()是在将要显示的对话框上进行各种检查和决策的适当位置。这是针对Honeycomb之前的API的。

这是针对API 11及更高版本的:

如果使用的是更高版本的API,则应该扩展DialogFragment。在这种情况下,我认为您可以通过DialogFragment的onCreateView()方法处理决策,该方法类似于onPrepareDialog()。

我希望您已阅读以下内容:http://developer.android.com/guide/topics/ui/dialogs.html

或此,取决于您的API:

http://developer.android.com/reference/android/app/DialogFragment.html

总体上,也许更干净的解决方案是禁用导致对话框首先显示的按钮或机制?也就是说,编写代码,使Dialog.show()仅在确实需要调用时才被调用。我必须了解有关您到底想做什么的更多详细信息。例如,假设您从按钮的onClickListener调用Dialog.show()。您确实不希望用户按下按钮,期望出现对话框,但是由于用户不理解的某些原因而使其不显示。更好的解决方案是一起禁用所有按钮,以使用户明显由于应用程序中的其他原因而无法使用此功能。

© www.soinside.com 2019 - 2024. All rights reserved.