我正在尝试使用一些 Android 小部件,例如用于列出玩家分数的滚动列表框。 我有我的基本 Libgdx 项目,因此没有 Activity 中的类阻碍。我正在尝试合并一个扩展 Activity 的类。问题(也是一个优点)是 libgdx 不是特定于 Android 的。所以我必须创建一个接口(interface)来处理 Android 部分、桌面部分、iOS 部分等...就像本页所述: http://code.google.com/p/libgdx/wiki/ApplicationPlatformSpecific 我做到了,它是“工作”的,我所说的工作是指程序进入从我的接口(interface)继承的正确类中。这个 Android 类扩展了 Activity。我已经实现了 onCreate() 函数,但它不起作用,我在这个 onCreate() 方法中放置了一些断点,但有忽略,所以我猜函数中不会出现。我读到我必须打电话:
Intent myIntent = new Intent(this, AvitivityName.class);
startActivity(myIntent);
我不会做上面两行的事情。我应该放它们吗?如果是的话,在哪里?
编辑
好的,首先感谢您非常详细的回答。我理解代码的第一部分(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() 对象时,它将传递接口(interface)。这样我就可以为每个支持调用适当的接口(interface)。但是,当项目的核心要调用我的界面时,我不知道如何返回主 Activity ,即“MainActivity extends AndroidApplication” Activity 。我不知道它到底是如何运作的。例如,如果我确实像您所说的那样并将“this”传递给我的 ARank() 对象(ARank(this))。然后当我想返回主要的 libgdx Activity 时,我不知道该怎么做。我是初学者,所以我不知道如何运作
Intent i = new Intent(getApplicationContext(), TestActivity.class);
startActivity(i);
我知道变量“i”应该代表这个类:
class MainActivity extends AndroidApplication
但是如果我调用 statrtActivity(主要 Activity );我不希望这个函数调用 onCreate 方法。
我对我的消息感到抱歉,可能不清楚,但我有点绝望。
如果您能回复,谢谢。
最佳答案
如果我正确的话,您正在尝试做的是从 LibGDX 打开另一个 Activity 。
我之前已经按照您刚才描述的方法完成了该操作。 我创建了一个界面,在每个项目上执行不同的操作。
现在,让我解释一下我不久前匆忙找到的不太优雅的解决方案。
在你的 android 接口(interface)类中,你需要有一个对你的主类的引用。 此外,您还需要一个函数来通过与 MainActivity 对话来切换到其他 Activity。
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。 因此,假设您的另一个 Activity 称为 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,它将通过调用您的主 Activity 并在那里获取其上下文来启动另一个 Activity 。
所以你可以看到我做了所有这些工作,因为我需要主 Activity 的 applicationContext 才能启动另一个 Activity 。
必须有一种更优雅、更正确的方法来做到这一点。我非常确定在 AndroidInterface 中保留对 MainActivity 的引用不是一个好主意,但是如果这就是您正在寻找的东西,这可以让我快速摆脱麻烦。你可以以此为基础开展工作。
无论如何,我希望这会有所帮助。 =)
关于java - 从 libgdx 项目加载 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23353064/