【问题标题】:How to start a kotlin Activity from an LibGDX Android class如何从 LibGDX And​​roid 类启动 kotlin Activity
【发布时间】:2019-10-22 11:08:23
【问题描述】:

我尝试从 LibGDX 类打开一个 Kotlin Activity,但我卡住了......

我已经阅读了How to start a Activity of Kotlin from Java android 并输入了类似示例的内容:startActivity(new Intent(context, myKotlinActivity.kt))

我的代码的目的是将用户从菜单重定向到 Kotlin Activity。

 @Override
 public void handleInput() {
     if(Gdx.input.justTouched()) {
          dispose();
          startActivity(new Intent(context, MyActivity.kt))
     }
 }

我的错误是:Cannot resolve method startActivity(Intent)

我忘记了什么?

非常感谢,如果这是一个愚蠢的问题,我深表歉意......

【问题讨论】:

  • 这不是你在 Kotlin 中打开活动的方式——你应该传递你的 MyActivity 类的 Java 类而不是使用你的类的文件名:(在这种情况下它应该是 MyActivity::class.java 而不是MyActivity.kt)
  • LibGDX 在您的项目中有单独的模块,用于“核心”代码和“安卓”代码。这样核心代码就可以在多个平台上使用,例如桌面 JVM 或 iOS。出于这个原因,核心代码不能调用任何特定于平台的东西,比如 Activity 类。您需要创建一个接口,您的android 模块可以使用代码实现以打开活动。
  • 您是否要在打开另一个活动时关闭游戏?除非切换文字 LibGDX 屏幕,否则您不应该直接在屏幕上调用 dispose()。如果您只是打开另一个 Activity,libGDX Activity 将在任务堆栈上仍然存在。如果你想关闭游戏,你应该在它的宿主Activity上调用finish()(这也必须通过接口来完成,因为它是特定于平台的代码)。

标签: java android kotlin libgdx


【解决方案1】:

可以通过为此类设置上下文来从不基于上下文的类启动活动,但您必须小心,因为它可能导致内存泄漏。另一方面,您可以使用应用程序上下文。为您的应用程序创建应用程序类。在此处查看如何实现它:Application singleton use in Android

创建实例后,您可以从任何您想要的类开始您的活动:

MyApplication.getInstance().startActivity(MyApplication.getInstance, MainAcitivity::class);

【讨论】:

  • 您不应该使用 ApplicationContext 在 Activity 之间导航,因为它需要 FLAG_ACTIVITY_NEW_TASK,并且您可能不想为每个 Activity 启动一个新任务。
  • @EpicPandaForce 确切地说,我忘了提到在这种情况下开发人员还应该设置 FLAG_ACTIVITY_NEW_TASK .. 我的回答只有在没有其他选项可以传递或请求特定类中的上下文时才有用。
  • OP 也无法从此模块中访问应用程序,因为他们使用的是 LibGDX。
【解决方案2】:

我想我在这里找到了答案:Android-Libgdx, Calling Another Activity after the Game starts on Button click

我会检查我的平板电脑...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    相关资源
    最近更新 更多