Android:从类中显示对话框

时间:2012-02-03 18:07:13

标签: android view dialog android-context

我编写了一个扩展View类的类来显示一些数据。用户需要能够通过单击它并在对话框中显示各种选项来操作此数据。

然而,我遇到的问题是,在Android中,要初始化AlertDialog.Builder实例,必须传入“this”(如在活动中)以使其工作(getApplicationContext()不起作用 - 请参阅此文章:Dialog throwing "Unable to add window — token null is not for an application” with getApplication() as context

如何解决此问题并在我的类中显示扩展View的对话框?

3 个答案:

答案 0 :(得分:3)

如果您需要从非视图类打开消息框,那么您有两个解决方案:

或者

  • 从android视图中,当您实例化类时,将上下文传递给类的构造函数,然后存储此上下文。然后,您就可以在警报框中使用它。

在传递mecanism的上下文中注意内存泄漏

编辑:

我正在编写一些代码,以便在我抓住机会并参加文档时让您了解如何使用处理程序。通常没有任何用处,但对于这个特殊情况,哦奇迹,看看我发现,完整和易于理解的代码示例如何使用处理程序及其消息机制。它隐藏在可折叠标题下(“http://developer.android.com/guide/topics/ui/dialogs.html#ShowingAProgressBar”):http://developer.android.com/guide/topics/ui/dialogs.html#ShowingAProgressBar

评论后的EDIT2

因为op希望它的对象可以在不同的活动中重用,所以不使用处理程序而是将上下文(实际上是调用活动的链接)传递给对象是有意义的。然后,该对象将能够在dialog.builder中使用此上下文。

在名为MyActivity的活动类的oncreate中:

MyCustomObject myObject = new MyCustomObject(this);

在你的对象类

Class MyCustomObject {
  private MyActivity mContext;

  void MyCustomObject(MyActivity context) {
    this.mContext = context;
  }

  private showDialog(String message) {
    AlertDialog.Builder alert = new AlertDialog.Builder(mContext);//we use the context
  }
}

当你完成对象时,不要忘记破坏对话框构建器和mContext。这可能会很快泄漏内存。

答案 1 :(得分:0)

使用View.getContext()并将其传递到您的AlertDialog.Build实例。

答案 2 :(得分:0)

您必须已发布一些代码,或者尝试使用

getParent();

而不是这个。请向我们展示一些代码