我不需要活动上的创建对话框的代码。我使用 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);
}
最后我查看了我的对话框。
感谢您的建议。