【问题标题】:Android-Libgdx, Calling Another Activity after the Game starts on Button clickAndroid-Libgdx,在按钮点击游戏开始后调用另一个活动
【发布时间】:2014-09-26 23:36:16
【问题描述】:

当我需要在游戏启动后单击按钮时调用另一个活动时,我遇到了一个重大问题。 Game 是通过 AndroidApplication 接口的initial(game, ) 方法调用的。

在普通 Activity 中,我可以轻松调用另一个 Activity,但从实现 AndroidApplication 的 Libgdx 类调用另一个 Activity 似乎很困难。

谁能建议一个适当的方法来从实现 AndroidApplication 接口的 Libgdx 类调用 Activity?

我尝试了一个星期,但似乎我的方法完全错误..

提前致谢。

【问题讨论】:

    标签: java android android-intent android-activity


    【解决方案1】:

    在你的 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(); .事实证明 myGameCallback 为空。我应该如何初始化它?
    • 哎呀,对不起,我忘了指定。你可以只添加一个setter。我将更新我的答案以显示这一点。
    • 我想你忘了把myGameCallback变量改成static,这样每次调用someMethod不会覆盖会给你一个空指针异常的变量的值。
    • 谢谢@SoundConception。你刚刚拯救了我的一天:)
    猜你喜欢
    • 2018-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多