0

我不需要活动上的创建对话框的代码。我使用 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);

但是当达到警报对话框调用的状态时,它会不断出错并且应用程序崩溃

错误开始于

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);

        }

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

感谢您的建议。

4

1 回答 1

0

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

于 2012-08-16T12:56:38.803 回答