Сенсорный Слушатель на кнопку андроида Android
Я работаю над игрой, и я зарегистрировал событие касания на спрайте, чтобы использовать его в качестве кнопки, и я получаю следующую ошибку, может любой помочь решить эту проблему.
10-21 19:03:22.895: E/AndroidRuntime(17410): FATAL EXCEPTION: UpdateThread
10-21 19:03:22.895: E/AndroidRuntime(17410): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
10-21 19:03:22.895: E/AndroidRuntime(17410): at android.os.Handler.<init>(Handler.java:121)
10-21 19:03:22.895: E/AndroidRuntime(17410): at android.widget.Toast$TN.<init>(Toast.java:317)
10-21 19:03:22.895: E/AndroidRuntime(17410): at android.widget.Toast.<init>(Toast.java:91)
10-21 19:03:22.895: E/AndroidRuntime(17410): at android.widget.Toast.makeText(Toast.java:233)
10-21 19:03:22.895: E/AndroidRuntime(17410): at test.matim.Level2GameScene$1.onAreaTouched(Level2GameScene.java:90)
10-21 19:03:22.895: E/AndroidRuntime(17410): at org.andengine.entity.scene.Scene.onAreaTouchEvent(Scene.java:409)
10-21 19:03:22.895: E/AndroidRuntime(17410): at org.andengine.entity.scene.Scene.onSceneTouchEvent(Scene.java:357)
10-21 19:03:22.895: E/AndroidRuntime(17410): at org.andengine.engine.Engine.onTouchScene(Engine.java:452)
10-21 19:03:22.895: E/AndroidRuntime(17410): at org.andengine.engine.Engine.onTouchEvent(Engine.java:438)
10-21 19:03:22.895: E/AndroidRuntime(17410): at org.andengine.input.touch.controller.BaseTouchController$TouchEventRunnablePoolItem.run(BaseTouchController.java:102)
10-21 19:03:22.895: E/AndroidRuntime(17410): at org.andengine.util.adt.pool.RunnablePoolUpdateHandler.onHandlePoolItem(RunnablePoolUpdateHandler.java:54)
10-21 19:03:22.895: E/AndroidRuntime(17410): at org.andengine.util.adt.pool.RunnablePoolUpdateHandler.onHandlePoolItem(RunnablePoolUpdateHandler.java:1)
10-21 19:03:22.895: E/AndroidRuntime(17410): at org.andengine.util.adt.pool.PoolUpdateHandler.onUpdate(PoolUpdateHandler.java:88)
10-21 19:03:22.895: E/AndroidRuntime(17410): at org.andengine.input.touch.controller.BaseTouchController.onUpdate(BaseTouchController.java:62)
10-21 19:03:22.895: E/AndroidRuntime(17410): at org.andengine.engine.Engine.onUpdate(Engine.java:584)
10-21 19:03:22.895: E/AndroidRuntime(17410): at org.andengine.engine.Engine.onTickUpdate(Engine.java:548)
10-21 19:03:22.895: E/AndroidRuntime(17410): at org.andengine.engine.Engine$UpdateThread.run(Engine.java:820)
Вот как я это делаю:
button = new Sprite(25, 310, activity.exitButtonRegion, BaseActivity.getSharedInstance().getVertexBufferObjectManager())
{
@Override
protected void onManagedUpdate(float pSecondsElapsed) {
super.onManagedUpdate(pSecondsElapsed);
}
@Override
public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
float pTouchAreaLocalX, float pTouchAreaLocalY) {
if(pSceneTouchEvent.isActionDown())
{
Toast.makeText(Level2GameScene.this.activity, "Clicked", Toast.LENGTH_LONG).show();
}
return true;
}
};
this.registerTouchArea(button);
attachChild(button);
}
1 ответ
Вы должны показать тост, как это, Вы должны сделать вызов в UiThread
this.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(Level2GameScene.this.activity, "Clicked", Toast.LENGTH_LONG).show();
}
});