【问题标题】:Android make a dialogbox from an non ui-activity classAndroid 从非 ui-activity 类创建一个对话框
【发布时间】:2012-08-16 20:56:38
【问题描述】:

我不需要活动上的创建对话框的代码。 我使用 opengles,我正在使用我创建的渲染器类进行绘图。我认为 android 活动窗口的执行停留在主要活动中。 我有我的绘图状态,当绘图达到一个状态时,我想发布一个对话框。所以这是一个问题,因为对话框构建器需要一个上下文,而渲染器类不是一个活动对象。 我是 opengles 的新手,首先我所做的所有工作都存在于 方法

public void onDrawFrame(GL10 gl)
{ }

所以我有 2 个类第 1 个 ui 类

mainactivity extends activity

第二个渲染器类

class mainrenderer implements GLSurfaceView.Renderer

我想从第二类中使用活动操作,例如创建对话框。 你能给我一个解决方案吗? 谢谢。

换句话说,我想从一个不是 ui 类的类(渲染器)中创建一个对话框。

已编辑

我传递了我的活动类的上下文 作为myrender = new Renderer1(this); 在渲染器的构造函数中我有

class Renderer1 implements GLSurfaceView.Renderer
/* initializations */

public Renderer(Context context) {
 super();
 mcontext = context; 
}

然后我实现了on drawFrame 方法,当我达到一个状态时我调用方法alertdialogbox() 下面给出

 public void alertdialogbox()  /* some code */  AlertDialog.Builder
 builder = new AlertDialog.Builder(mcontext);

但是当达到alertdialogbox调用的状态时,它会不断出错和应用程序崩溃

错误以

开头

java.lang.RuntimeException:无法在线程内创建处理程序 没有调用 Looper.prepare()

编辑 2 已解决 我在主要活动中初始化一个处理程序:

Handler handler = new Handler() {
          @Override
          public void handleMessage(Message msg) {
              alertdialogbox();
             }
         };

alertdialogbox 是我在主活动类中声明的方法 并构造对话框

再次在我实例化 GlsurfaceView 和 Glrenderer 的主要活动中 我传递了我之前初始化的处理程序:

    Renderer = new Renderer1(handler);  
after that at the class Renderer1

    class Renderer1 implements GLSurfaceView.Renderer
     Handler mhandler;

    public Renderer( Handler handler) {
     super();
     mhandler = handler; 
    }

    *
    *
public void onDrawFrame(){
*
*

if (state) 
{ 
alertdialogbox();
 }
}
*
*
     public void alertdialogbox()
        {

            mhandler.sendEmptyMessage(1);

        }

最后我查看了我的对话框。

感谢您的建议。

【问题讨论】:

  • 您可以创建一个方法 makeDialog ,该方法将context 作为参数,或者在创建MainRenderer 时传递上下文以将其作为类字段。如果不知道您打算以哪种方式使用代码,很难写出更具体的答案:)
  • 如果您编辑问题并在其中编写代码,则更易于阅读。同样对于崩溃,最好提供错误和堆栈跟踪,因为这是所有信息所在的位置:o)
  • 您的渲染器类未在 UI 线程上执行,因此出现错误。我建议你看看Handler 类。在您的主要活动中创建一个处理程序,并在创建时将其传递给渲染器。然后使用这个处理程序来创建对话框。

标签: android opengl-es android-activity


【解决方案1】:

从另一个类创建AlertDialog(或任何其他 UI 小部件)时,您必须具有对您的活动类的引用,并且使用该对象,您可以调用 activity.runOnUIThread() 来执行与您的 AlertDialog 相关的任何代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多