2012-08-15 75 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相關的任何代碼。