2012-08-15 73 views
0

一个对话框,我不需要在一个活动的创建对话框的代码。 我使用opengles,并使用我创建的渲染器类进行绘制。我认为在android活动窗口执行停留在主要活动。 我有我的绘画状态,当绘制到达我想发布一个对话框的状态。所以有一个问题,因为对话框构建器需要一个上下文,并且渲染器类不是一个活动对象。 我在opengles新首先我要做的工作在 方法存在安卓使从非UI的活动类

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方法,当我到达状态i拨打以下

public void alertdialogbox() /* some code */ AlertDialog.Builder 
builder = new AlertDialog.Builder(mcontext); 
01给出 alertdialogbox() 该方法

,但是当到达该alertdialogbox呼吁,国家它使示数和应用程序崩溃

误差与

了java.lang.RuntimeException开始:内螺纹无法创建处理程序 已经不叫Looper.prepare()

编辑2解决 我在主活性初始化处理程序为:

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

alertdialogbox是,我声明主要活动类 内部的方法,并再次构建对话框

其中i实例化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); 

     } 

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

感谢suggetions。

+0

您可以创建一个方法makeDialog,它将'context'作为参数,或者当创建'MainRenderer'传递一个上下文以将其作为类字段。如果不知道你打算如何使用代码,很难写出更具体的答案:) – yoshi 2012-08-16 09:22:25

+0

如果你编辑你的问题并在那里写代码,它会更容易阅读。此外,对于崩溃,提供错误和它的堆栈跟踪是很好的,因为这是所有信息的地方:o) – yoshi 2012-08-16 09:57:21

+0

您的渲染器类不在UI线程上执行,因此是错误。我建议你看一下'Handler'类。在主要活动中创建一个处理程序,并在创建时将其传递给渲染器。然后使用这个处理程序来创建对话框。 – 2012-08-16 10:45:03

回答

0

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