【问题标题】:How to implement Kotlin class from java in android?如何在android中从java实现Kotlin类?
【发布时间】:2018-02-23 06:56:17
【问题描述】:

我是一名 Java/Kotlin 新手,正在开发一个 Android 应用程序。我尝试在 YourApplication.kt 中实现以下内容,我在这里找到了:https://stackoverflow.com/a/42679191/4666306

package com.tijaname.fortysix

import android.app.Activity
import android.app.Application
import android.os.Bundle
import android.util.Log.println

class YourApplication : Application() {

    override fun onCreate() {
        super.onCreate()
        registerActivityLifecycleCallbacks(AppLifecycleTracker())
    }

}


class AppLifecycleTracker : Application.ActivityLifecycleCallbacks  {
    private var numStarted = 0

    override fun onActivityStarted(activity: Activity?) {
        if (numStarted == 0) {
            println("Activity has started");
        }
        numStarted++
    }

    override fun onActivityStopped(activity: Activity?) {
        numStarted--
        if (numStarted == 0) {
            println("Activity  has stopped");
        }
    }

}

我加了

 ext.kotlin_version = '1.1.51'
 classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

到我的 gradle 脚本。我还将它添加到我的清单中:

         <activity android:name=".YourApplication"></activity>

我尝试像这样调用 kotlin 脚本(来自我在 java 中的 MainActivity):

 Intent intent = new Intent(getBaseContext(), YourApplication.class);
    startActivity(intent);

但我收到以下错误:

类 'YourApplication' 不是抽象的,没有实现抽象成员 public abstract fun onActivityResumed(p0: Activity!)...

我按照 Android-Studio 的建议将其抽象化,但这导致了更多错误。

我还尝试按照 AS 的建议“实施成员”,但这会使我的应用程序在模拟器中崩溃。

谢谢!

【问题讨论】:

  • 您创建了应用程序类,但试图将其作为活动。这是错的。您到底需要什么,活动类还是应用程序类?

标签: java android android-studio kotlin


【解决方案1】:

您的内部类,即 AppLifecycleTracker 类需要覆盖更多的方法。

  import android.app.Activity
  android.app.Application
  import android.os.Bundle


/**
 * Created by saritha high 13/2/18.
 */
class AirventApplication : Application() {


    override fun onCreate() {
       super.onCreate()
       registerActivityLifecycleCallbacks(AppLifecycleTracker())
    }

  class AppLifecycleTracker : Application.ActivityLifecycleCallbacks {

      private var numStarted = 0

      override fun onActivityStarted(activity: Activity?) {
          if (numStarted == 0) {
              println("Activity has started");
          }
          numStarted++
      }

      override fun onActivityStopped(activity: Activity?) {
          numStarted--
          if (numStarted == 0) {
              println("Activity  has stopped");
          }
      }

      override fun onActivityPaused(p0: Activity?) {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
       }

      override fun onActivityResumed(p0: Activity?) {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
      }

      override fun onActivityDestroyed(p0: Activity?) {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
      }

      override fun onActivitySaveInstanceState(p0: Activity?, p1: Bundle?)  {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
      }

      override fun onActivityCreated(p0: Activity?, p1: Bundle?) {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
      }
 }
}

并在 Manifest 中声明您的应用程序类,例如:

  <application
    android:name=".YourApplication"
    android:icon="@mipmap/app_icon"
    android:label="@string/app_name"
    android:theme="@style/AppTheme">
    <activity
        android:name=".YourActivity"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
   </application>

【讨论】:

  • 感谢您的回复,但我已经尝试过(Android Studio 建议这样做),但这只会导致我的应用程序崩溃。控制台不会显示其他错误
  • @Rufus 删除所有 TODO 函数调用,它将停止崩溃
猜你喜欢
  • 2019-01-14
  • 2021-09-02
  • 2021-09-03
  • 2017-11-02
  • 1970-01-01
  • 1970-01-01
  • 2020-05-08
  • 2017-10-24
  • 1970-01-01
相关资源
最近更新 更多