Как вызвать Activity, написанную на Kotlin, из Activity, написанную на Java, используя метод newIntent?

113
19 августа 2019, 23:50

У меня есть Activity1.java и Activity2.kt.

В Activity2.kt есть вспомогательный объект (компаньон) newIntent:

companion object {
   @JvmStatic
   fun newIntent(parent: Activity, extra: Int): Intent {
      val intent = Intent(parent, Activity2.javaClass) //кстати есть ли разница между *.javaClass и *::class.java ?
      intent.putExtra(EXTRA_CONST, extra)
      return intent
   }
}

Задача – из Activity1.java вызвать Activity1.kt методом startActivity. Сейчас это выглядит вот так:

startActivity(Activity2.newIntent(this, extra));

Выглядит отлично, и IDE не ругается, но в рантайме получаю вот такую ошибку:

android.content.ActivityNotFoundException: Unable to find explicit activity class {path.path/path.path.Activity2$Companion}; have you declared this activity in your AndroidManifest.xml?

То есть идёт попытка обратиться к классу Activity2.Companion.

Я знаю что это будет работать если обе активности будут написаны на Kotlin и в курсе про всякие удобные способы вызова активностей непосредственно в Kotlin, но меня интересует именно эта ситуация – вызвать активность на котлине из активности на джаве.

Проблема возникла в ходе переписывания существующего Java-кода на Kotlin. Можно конечно переписать сразу весь код, но я решил делать поэтапно – файл за файлом, так как проект большой. К тому же котлин совместим с джавой, так почему бы и нет?

Answer 1

Если надо запустить, то можно сделать так

   companion object {
    fun start(context: Context) {
        val intent = Intent(context, Activity2::class.java)
        context.startActivity(intent)
    }
}
READ ALSO
Как рисовать картинки при помощи батча и в той же сцене отрисовывать tiledmap через OrthogonalTiledMapRenderer в libgdx?

Как рисовать картинки при помощи батча и в той же сцене отрисовывать tiledmap через OrthogonalTiledMapRenderer в libgdx?

Когда я пытають отрисовать tiledmap и после этого рисую texture (batchdraw("объект Texture")) я вижу только tiledmap

97
как в React js передать свойство элементу onClick или onKeyUp?

как в React js передать свойство элементу onClick или onKeyUp?

вчера начал смотреть React JS, создал скрипт, который просто добавляет на страницу таблицу с input'амиНо мне надо на эти импуты еще повесить событие,...

135
Javascript: запись fn(arg1)(arg2)…(argN)

Javascript: запись fn(arg1)(arg2)…(argN)

Прошу прощения, если вопрос идиотскийИзучаю JS и функциональное программирование, и не совсем понимаю что означает данная запись

124
Как убрать zoom на amcharts 4?

Как убрать zoom на amcharts 4?

Есть небольшая проблема при использовании amchartsМне нужно построить такой график (зависимость количества товаров от цены)

135