0

我在 MainActivity 中创建了一个 SurfaceView 子类,它通过画布绘制运行一些动画/游戏/线程,我希望在游戏结束后立即出现一个对话框。我创建了一个名为 openNewGameDialog 的函数,我在其中调用 new AlertDialog.Builder(MainActivity.this) 但是因为我是从线程调用它,所以它给出了错误。请帮忙!!以下是代码:

public class MainActivity extends Activity implements OnTouchListener{

GameSurface dSurface;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    dSurface=new GameSurface(this);
    dSurface.setOnTouchListener(this);
    initialize();
    setContentView(dSurface);
}
private void initialize(){
    }
@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    dSurface.pause();
}
@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    dSurface.resume();
}
private void openNewGameDialog(){
    new AlertDialog.Builder(MainActivity.this)
    .setTitle("hhhhhh")
    .setItems(R.array.ok, 
    new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub
            }
    })
    .show();
}
public class GameSurface extends SurfaceView implements Runnable{

    SurfaceHolder gameHolder;
    Thread gameThread = null;
    public GameSurface(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
        gameHolder = getHolder();
    }
    public void pause(){
        isRunning = false;
        while(true)
        {
            try {
                gameThread.join();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            break;
        }
        gameThread=null;
    }
    public void resume(){
        isRunning = true;
        gameThread = new Thread(this);
        gameThread.start();
    }
    @Override
    public void run() {
        // TODO Auto-generated method stub
        while(isRunning){
            if(!gameHolder.getSurface().isValid())
                continue;
            Canvas canvas = gameHolder.lockCanvas();
            canvas.draw something
            if game==ends
                            openNewGameDialog();

            gameHolder.unlockCanvasAndPost(canvas);
        }

    }

}

}

4

1 回答 1

0

您必须将 的内容openNewGameDialog()放在 aRunnable而不是方法中,然后使用 that 调用类的runOnUiThread(Runnable r)方法。ActivityRunnable

任何类型的 UI 操作都只能由 UI 线程完成。该runOnUiThread(Runnable r)方法排队Runnable到 UI 线程事件队列。

于 2013-09-20T00:00:11.520 回答