我目前正在尝试开发一个小游戏,我想使用一个扩展SurfaceView的类并让它在i线程中绘制(类似于LunarLander)。但是,当我想将contentview更改为xml中的那个时,那个我没有绘制的我试图从我的surfaceview类中调用一个方法,该方法在活动类中将通过setContentView更改contentview,我得到一个RuntimeException:
"Can't create handler inside thread that has not called Looper.prepare()"
这可能只是因为我对Android和java开发有点新手,但是我不明白为什么当方法是静态方法时它会工作但不是其他方法呢?
(我的Start类中扩展活动的方法)
public void simulationDone()
{
.....
}
(尝试访问它)
new Start().simulationDone();
答案 0 :(得分:2)
有几个问题:
首先,您不应多次致电setContentView
。
其次,您的表面视图需要参考您的活动。我倾向于在我需要与活动进行通信的视图上定义侦听器。在名为SurfaceView
的自定义MySurfaceView
中:
public static interface Listener {
public void simulationDone();
}
private Listener listener;
public void setListener(Listener listener) {
this.listener = listener;
}
然后让您的活动实施MySurfaceView.Listener
并在创建表面视图时致电mySurfaceView.setListener(this)
。