首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用AlertDialog的Looper.prepare()

使用AlertDialog的Looper.prepare()
EN

Stack Overflow用户
提问于 2012-02-02 17:28:55
回答 2查看 2.5K关注 0票数 0

我想在游戏中插入一个计时器。如果时间为0,则会有一个AlertDialog告诉用户时间已到,并返回到前一个活动。下面是这个方法(它在一个扩展SurfaceView的类中):

代码语言:javascript
复制
public void showTime(){
    time--;
    Log.i("GameView time", "" + time);
    if (time <= 0){
        Log.i("gameview time","time out");
        gameTimer.setRunning(false);
        AlertDialog.Builder alt_bld = new AlertDialog.Builder(this.getContext());
        AlertDialog alert = alt_bld.create();
        alert.setTitle("Time is out. You lose.");
        alert.setButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                main.onBackPressed();
            }});
        alert.show();
    }
}

GameTimer类是一个线程:

代码语言:javascript
复制
public class GameTimer extends Thread{

private GameView gameView;
private boolean run;

public GameTimer(GameView gameView){
    this.gameView = gameView;
}

public void setRunning(boolean value){
    this.run = value;
} 

public void run(){
             Looper.prepare();
    while (run){
        try {
            gameView.showTime();
            sleep(1000);
        } catch (Exception e){
            e.printStackTrace();
        }
    }
            Looper.loop();
}

}

AlertDialog出现,但应用程序崩溃,并显示以下消息:只有创建视图层次结构的原始线程才能接触视图。但这条线创造了..。问题出在哪里?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-02 17:55:47

使用Handler或使用

代码语言:javascript
复制
this.runOnUiThread(new Runnable() {

        public void run() {
            // TODO Auto-generated method stub

        }
    });

错误本身就说明了整个故事。如果你不在Activity/ View的父类中,那么使用一些回调机制。这将帮助您解决您的问题。干杯。

票数 2
EN

Stack Overflow用户

发布于 2012-02-02 18:29:57

从您得到的错误判断,您正在将View对象从其他地方传递到Thread类构造函数,然后尝试使用它的方法来创建一个AlertDialog。不幸的是,这是行不通的。您需要使用Handler将消息(在本例中,time = 0)从线程发送回View类,在该类中定义了showTime()方法。定义处理程序,然后覆盖handleMesage()方法以调用showTime() methid。

下面的链接可以帮助你开始。http://developer.android.com/reference/android/os/Handler.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9109882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档