Android:显示类中的对话框
我编写了一个类来扩展 View 类以显示一些数据。用户需要能够通过单击数据并在对话框中显示各种选项来操作这些数据。
然而,我遇到的问题是,在 Android 中,要初始化 AlertDialog.Builder 实例,您必须传入“this”(如在活动中)才能使其工作(getApplicationContext() 不起作用 - 请参阅此文章: 对话框抛出“无法添加窗口 - 令牌 null 不适用于应用程序”,以 getApplication() 作为上下文)
如何解决此问题并从扩展 View 的类中显示对话框?
I have written a class that extends the View class to show some data. The user needs to be able to manipulate this data by clicking on it and being presented with various options in a dialog box.
The problem I am getting, however, is that in Android, to initialise an AlertDialog.Builder instance, you must pass in "this" (As in an activity) in order for it to work (getApplicationContext() does not work - see this article: Dialog throwing "Unable to add window — token null is not for an application” with getApplication() as context)
How can I get past this problem and show the dialog from within my class that extends View?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果您需要从非视图类打开消息框,那么您有两种解决方案:
使用处理程序:http://developer.android.com/reference/android/os/Handler.html
在您的视图中创建一个处理程序,然后将其传递给您的类进行存储。当您想调用消息框时,您将使用
handler.post(new Runnable() {//在此处显示消息框});
或者
小心上下文传递机制的内存泄漏
编辑:
当我抓住机会去查看文档时,我正在编写一些代码来帮助您了解如何使用处理程序。通常那里没有任何用处,但对于这种特殊情况,哦奇迹,看看我发现了什么,完整且易于理解的代码示例,说明如何使用处理程序及其消息机制。它隐藏在可折叠标题下(“http://developer.android.com/guide/topics/ui/dialogs.html#ShowingAProgressBar”):http://developer.android.com/guide/topics/ui/dialogs.html#ShowingAProgressBar
评论后编辑2
因为操作希望其对象可以在不同的活动中重用,所以不使用处理程序而是将上下文(真正到调用活动的链接)传递给对象是有意义的。然后该对象将能够在dialog.builder 中使用此上下文。
在名为 MyActivity 的活动类的 oncreate 中:
在对象类中,
当您完成对象时,不要忘记销毁并清空对话框构建器和 mContext。这可能会很快泄漏内存。
If you need to open a messagebox from a non view class then you have two solutions :
Use handlers : http://developer.android.com/reference/android/os/Handler.html
Create a handler in your view, then pass it to your class be stored. When you want to call your messagebox, you'll use
handler.post(new Runnable() {//show messagebox here});
Or
Be careful of memory leaks with the context passing mecanism
EDIT :
I was writing some code to get you going on how to use handlers when I took a chance and went for the doc. Usually there is nothing of use there but for this particular case, oh miracle, look what I found, complete and easy to understand code example of how to use a handler and its message mecanism. It is hidden under the foldable title ("http://developer.android.com/guide/topics/ui/dialogs.html#ShowingAProgressBar") : http://developer.android.com/guide/topics/ui/dialogs.html#ShowingAProgressBar
EDIT2 AFTER COMMENTS
Because the op wants its object to be reusable in different activities it makes sense not to use handlers but instead to pass the context( a link to the calling activity really) to the object. The object will then be able to use this context in the dialog.builder.
In the oncreate of your activity class called MyActivity :
In your object class
DO NOT FORGET TO DESTROY AND NULLIFY THE DIALOG BUILDER AND THE mContext when you are done with your object. This could leak memory really fast.
使用 View.getContext() 并传递它到您的
AlertDialog.Build
实例中。Use View.getContext() and pass that into your
AlertDialog.Build
instance.您必须发布一些代码,或者尝试用它
代替这个。请向我们展示一些代码
You must have posted some code,Or lt try it with
instead of this.And please show some code to us