6

我创建了一个名为MyCustomDialogextends的自定义对话框Dialog。我创建并显示我的自定义对话框,如下所示:

new MyCustomDialog(myContext).show();

我重写了Dialog.onCreate(Bundle savedInstanceState)进行初始化的方法。我还在此方法中检查某个条件是否成立,如果不成立,我想关闭/取消我的对话。我已经尝试在我的对话框和方法中调用 and 方法,但cancel()它没有效果。dismiss()onCreate(Bundle savedInstanceState)onStart()

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

4

2 回答 2

4

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

或者,重命名您的show()方法showIfRequired()(或其他名称),并在那里添加条件显示逻辑。

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

此外,作为旁注,您应该使用DialogFragment来支持Dialog. 它在 v4 支持库中可用。

于 2012-07-31T16:19:13.983 回答
1

这适用于 API 级别 10 及以下:

首先,您应该在 Activity 类中覆盖 onCreateDialog(int id, Bundle args) ,这是您在做什么吗?对话框始终作为 Activity 的一部分创建和显示。其次,我认为您不能取消/关闭 onCreateDialog 中的对话框,因为在调用 onCreateDialog 时它实际上并没有被创建。也就是说,您不能取消/关闭尚未创建的内容。您可以尝试改写 onPrepareDialog() 并检查以取消/关闭那里的对话框。此时实际上应该已经创建了对话框(只是没有显示),因此如果您在那里调用取消/关闭,您将能够阻止它显示。

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()。您真的不希望用户按下按钮,期待一个对话框,但由于用户不理解的某种原因而没有显示它。更好的解决方案是一起禁用该按钮,这样用户就可以清楚地看到,由于应用程序中的其他原因,此功能不可用。

于 2012-07-31T16:26:04.500 回答