从libgdx项目加载活动

时间:2014-04-28 23:43:00

标签: java android android-activity libgdx

我试图使用一些Android小部件,比如滚动列表框列出玩家的分数。 我有我的基本Libgdx项目,所以没有来自Activity的类hineriting。我正在尝试合并一个扩展Activity的类。问题(也是一个优点)是libgdx不是特定于Android的。所以我必须创建一个界面来处理Android部分桌面部分iOS部分等...如本页所述: http://code.google.com/p/libgdx/wiki/ApplicationPlatformSpecific 我做了它并且它正在工作",我的工作意味着该程序从我的界面进入正确的班级。这个Android类扩展了Activity。我已经实现了onCreate()函数,但它没有工作,我在这个onCreate()方法中放了一些断点,但是有忽略,所以我猜有没有进入函数。我读到我必须打电话:

Intent myIntent = new Intent(this, AvitivityName.class);
startActivity(myIntent);

我没有在上面做这两个lignes。我应该把它们?如果是这样,在哪里?

2 个答案:

答案 0 :(得分:1)

如果我正确你想要做的是从LibGDX打开另一个活动。

我之前做过你刚刚描述过的事情。 我创建了一个在每个项目上执行不同操作的界面。

现在,让我解释一下我发现的一段时间不那么优雅的解决方案。

在你的android接口类中,你需要引用你的主类。 此外,您需要通过与MainActivity交谈来切换到其他活动的功能。

public class AndroidInterface implements MyInterface{
    private MainActivity _mainActivity;
    ...
    public AndroidInterface (MainActivity activity){
        _mainActivity = activity;
    }
    ...
    public void switchActivity(int activityID) {
        _mainActivity.startMyActivity(activityID);
    }
}

很简单,不是吗?

现在,让我们转到您的MainActivity类。您将初始化并执行您将放在onCreate方法上的其他内容,但不要忘记创建一个以MainActivity作为参数的AndroidInterface。 因此,假设您的其他活动名为TestActivity,如果您的activityID为10,则会调用它。

public class MainActivity extends AndroidApplication{
    ...
    public MainActivity (){
        ...
    }
    ...
    public void onCreate(Bundle savedInstanceState) {
        ...
        AndroidInterface androidFunctions = new AndroidInterface((MainActivity)this);
        ...
    }
    ...
    public void startMyActivity(int activityID) {
        switch(activityID){
            case 10:
                Intent i = new Intent(getApplicationContext(), TestActivity.class);
                startActivity(i);
                break;
        }
    }
}

所以最终它看​​起来或多或少会像那样。您可以调用AndroidInterface,它将通过调用Main Activity并在其中获取其上下文来启动另一个活动。

所以你可以看到我做了所有工作,因为我需要Main Activity的applicationContext才能启动另一个Activity。

必须有更优雅和正确的方法来做到这一点。我很确定在AndroidInterface中保留对MainActivity的引用并不是一个好主意,但如果这就是你想要的东西,这让我快速摆脱困境。你可以从中工作。

无论哪种方式,我希望这会有所帮助。 =)

答案 1 :(得分:0)

好的,先谢谢你的详细解答。我理解代码的第一个标准(AndroidInterface类)。但我不确定第二部分是什么。这是构建libgdx项目时android部分中的默认代码:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration();

    initialize(new MyMain(), cfg);
}

这就是我在这个函数中添加的内容:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration();
    cfg.useGL20 = true;

    IRank rank = new ARank();
    initialize(new MyMain(rank), cfg);
}

因此,当它创建MyMain()对象时,它将传递接口。所以我可以为每个支持调用适当的接口。但是当项目的核心要调用我的界面时,我不知道如何回到主要活动,“MainActivity扩展AndroidApplication”。我不知道它是如何起作用的。例如,如果我喜欢你说并将“this”传递给我的ARank()对象(ARank(this))。然后,当我想回到主要的libgdx活动时,我不知道该怎么做。我是个乞丐,所以我不知道它是如何运作的

Intent i = new Intent(getApplicationContext(), TestActivity.class);
            startActivity(i);

我知道变量“i”应该代表这个类:

class MainActivity extends AndroidApplication

但是如果我调用statrtActivity(主要活动);我不希望这个函数回想起onCreate方法。

我很抱歉我的消息,可能不清楚,但我有点绝望。

谢谢你能回答。

编辑:这不是我的第一个问题的答案,但我不知道如何回答特定答案并同时提出一些代码。