0

アクティビティの作成ダイアログ ボックスのコードは必要ありません。私はopenglesを使用しており、作成したレンダラークラスで描画しています。Androidアクティビティウィンドウでの実行はメインアクティビティのままだと思います。描画の状態があり、描画が状態に達したときに、ダイアログ ボックスを投稿したいと考えています。ダイアログボックスビルダーはコンテキストを必要とし、レンダラークラスはアクティビティオブジェクトではないため、問題があります。私はopenglesの初心者であり、まず、私が行うすべての作業はメソッドに存在します

public void onDrawFrame(GL10 gl)
{ }

だから私は2つのクラスを持っています.1つはuiクラスです

mainactivity extends activity

2 番目のレンダラー クラス

class mainrenderer implements GLSurfaceView.Renderer

2 番目のクラスから、ダイアログ ボックスの作成などのアクティビティ操作を使用する必要があります。これに対する解決策を教えてもらえますか? ありがとう。

言い換えれば、UIクラスではないクラス(レンダラー)からダイアログボックスを作成したいのです。

編集済み

myrender = new Renderer1(this); 私が持っているRendererのコンストラクターで、アクティビティクラスのコンテキストを渡します

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 に答える