【问题标题】:Can't dismiss the dialog in my Android app无法关闭我的 Android 应用程序中的对话框
【发布时间】:2012-02-01 20:49:25
【问题描述】:

我在这里有一些代码(我的活动类和一些扩展 WebViewClient 的类) 所以,在我的活动中,我会这样做:

protected Dialog onCreateDialog(int id) {
    switch(id) {
        case 1:
            //logging vk dialog
            Log.d("OLOLOLO", "webview"); 
            dialog = new Dialog(this);
            dialog.setContentView(R.layout.webviewl);
            dialog.setTitle("loggin in");

            webview = (WebView) dialog.findViewById(R.id.vkWebView);
            webview.setWebViewClient(wvClforVK);  
            webview.loadUrl(url);
            // do the work to define the pause Dialog 
            break;
        case 2:
            // already logged vk dialog
            break;
        default:
            dialog = null;
    }
    return dialog;
}

然后在某个buttonclick 监听器上调用showDialog(1)

onPageFinished() 方法中的 webview 类中,我需要关闭我的对话框,但我认为这样做是不正确的:

MyActivity activity = new MyActivity();  //my main activity object
activity.dismissDialog(1);

它不起作用:

01-03 20:41:10.758: E/AndroidRuntime(1172): java.lang.IllegalArgumentException: 没有通过 Activity#showDialog 显示 ID 为 1 的对话框

如何让我的活动对象正确关闭对话框?

【问题讨论】:

  • 我很高兴看到我不是唯一一个在日志中使用诸如“OLOLOLO”之类的垃圾邮件的人

标签: android dialog webview dismiss


【解决方案1】:

问题是您实例化了一个没有任何对话框的新活动。您必须在创建对话框的同一个活动实例上调用dismissDialog 方法。如果您在另一个类中调用它,则必须以某种方式将您的活动传递给该类(例如,您可以将其作为参数传递)。无论如何,不​​建议以这种方式实例化活动,如果您在项目的清单文件中定义它们,它们会自动实例化。

【讨论】:

  • 所以请告诉我,当 webview 中的页面已经加载时,我该如何销毁我的对话框?
  • 请把你的全班活动发给我。我想看看你的 onPageFinished 方法。
  • 你必须这样写: webView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); YourActivity.this .dismissDialog(YOUR_DIALOG_ID); } });
  • 我有 2 个类...第一个 - 我的活动,第二个 - 带有 onPageFinished() 方法的 webview 客户端。因此,在我的活动中,我使用客户端创建对话框、webview 并将其放入对话框(通过 dialog.setContentView),并且需要在 onPageFinished() 方法中对其进行调整。 YourActivity.this.dismissDialog 不起作用,“没有封闭实例blabla”((
  • 在 webview 客户端类的构造函数中,您可以通过活动传递参数。然后将此活动保存在一个字段中并在该字段上调用dismiss方法。如果不清楚,请将这两个课程发给我,我可以更准确地为您提供解决方案。
【解决方案2】:

正如异常所说,您正在尝试关闭在使用 showDialog 之前未显示的对话框。您需要检查对话框的生命周期。您可以使用Dialog.isShowing() 方法确认对话框是否在关闭之前显示。

【讨论】:

  • 我做到了,而且我知道,我的对话框在关闭之前显示...活动对象中的问题...我无法正确理解
  • MyActivity 是新的 Activity 吗?如果您在同一个活动中运行 showDialog dismissDialog(1) 就足够了(您不需要 activity.dismissDialog(1))。如果不使用 context=dialog.getContext() 然后 context.dismiss dialog(1)
  • 我试过了...但它不是Context对象中的dismissDialog()方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-21
  • 1970-01-01
  • 2015-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多