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

时间:2012-07-31 16:16:21

标签: android android-dialog

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

new MyCustomDialog(myContext).show();

我覆盖Dialog.onCreate(Bundle savedInstanceState)方法进行初始化。我也检查这个方法是否存在某个条件,如果没有,我想解除/取消我的对话框。我尝试在对话框的cancel()dismiss()方法中调用onCreate(Bundle savedInstanceState)onStart()方法,但它没有效果。

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

2 个答案:

答案 0 :(得分:2)

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

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

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

另外,作为旁注,您应该使用DialogFragment支持Dialog。它可以在v4支持库中找到。

答案 1 :(得分:1)

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

首先你应该在Activity类中覆盖onCreateDialog(int id,Bundle args),那是你在做什么的?始终创建对话框并将其显示为活动的一部分。其次,我不认为您可以取消/取消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()。你不是真的希望用户按下按钮,期望一个对话框,但由于某些原因用户不理解而没有显示。一个更好的解决方案是一起禁用按钮,这样对于用户来说显而易见的是,由于应用程序中的其他内容,此功能不可用。