Java Android Libgdx,在游戏开始后点击按钮调用另一个活动
当我需要在游戏开始后点击按钮调用另一个活动时,我遇到了一个大问题。该游戏通过AndroidApplication接口中的initiate(Game,)方法调用 在正常活动中,我可以很容易地调用另一个活动,但从实现AndroidApplication的Libgdx类调用另一个活动似乎很困难 有人能推荐一个合适的方法从实现AndroidApplication接口的Libgdx类调用活动吗 我试着这样做了一个星期,但我的方法似乎完全错了Java Android Libgdx,在游戏开始后点击按钮调用另一个活动,java,android,android-intent,android-activity,Java,Android,Android Intent,Android Activity,当我需要在游戏开始后点击按钮调用另一个活动时,我遇到了一个大问题。该游戏通过AndroidApplication接口中的initiate(Game,)方法调用 在正常活动中,我可以很容易地调用另一个活动,但从实现AndroidApplication的Libgdx类调用另一个活动似乎很困难 有人能推荐一个合适的方法从实现AndroidApplication接口的Libgdx类调用活动吗 我试着这样做了一个星期,但我的方法似乎完全错了 提前感谢。在LibGdx类中定义回调接口,并使用它通知您的And
提前感谢。在LibGdx类中定义回调接口,并使用它通知您的
AndroidLauncher
启动新活动
例如,在LibGdx游戏类中:
// Your Game class in the core package
public class MyGame extends Game {
// Define an interface for your various callbacks to the android launcher
public interface MyGameCallback {
public void onStartActivityA();
public void onStartActivityB();
public void onStartSomeActivity(int someParameter, String someOtherParameter);
}
// Local variable to hold the callback implementation
private MyGameCallback myGameCallback;
// ** Additional **
// Setter for the callback
public void setMyGameCallback(MyGameCallback callback) {
myGameCallback = callback;
}
@Override
public void create () {
...
}
...
private void someMethod() {
...
// check the calling class has actually implemented MyGameCallback
if (myGameCallback != null) {
// initiate which ever callback method you need.
if (someCondition) {
myGameCallback.onStartActivityA();
} else if (someOtherCondition) {
myGameCallback.onStartActivityB();
} else {
myGameCallback.onStartSomeActivity(someInteger, someString);
}
} else {
Log.e("MyGame", "To use this class you must implement MyGameCallback!")
}
}
}
然后确保您的AndroidLauncher
实现了所需的接口:
// Your AndroidLauncher
public class AndroidLauncher extends AndroidApplication implements MyGame.MyGameCallback {
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
// create an instance of MyGame, and set the callback
MyGame myGame = new MyGame;
// Since AndroidLauncher implements MyGame.MyGameCallback, we can just pass 'this' to the callback setter.
myGame.setMyGameCallback(this);
initialize(myGame, config);
}
@Override
public void onStartActivityA() {
Intent intent = new Intent(this, ActivityA.class);
startActivity(intent);
}
@Override
public void onStartActivityB(){
Intent intent = new Intent(this, ActivityB.class);
startActivity(intent);
}
@Override
public void onStartSomeActivity(int someParameter, String someOtherParameter){
Intent intent = new Intent(this, ActivityA.class);
// do whatever you want with the supplied parameters.
if (someParameter == 42) {
intent.putExtra(MY_EXTRA, someOtherParameter);
}
startActivity(intent);
}
}
谢谢你的建议。看起来它会起作用,但需要尝试使用您的建议。另外,我可以问一下为什么在这种情况下需要接口吗?我将感谢您的回复:)我尝试过使用它,但我在MyGame SomeMethod()myGameCallback.onStartActivityA()中得到了NullPointerException。结果证明myGameCallback是空的。我应该如何初始化它?是的,对不起,我忘了指定它。您可以添加一个setter。我将更新我的答案以显示这一点。我想您忘了将myGameCallback变量更改为static,这样每次调用someMethod时,它都不会覆盖变量的值,从而导致出现nullpointer异常。谢谢您@SoundConcept。你刚刚救了我一天:)