Я хочу начать другое действие на Android, но получаю эту ошибку:
Укажите вызов конструктора; классификатор 'Page2' не имеет сопутствующего объекта
после создания экземпляра Intent
класса. Что мне делать, чтобы исправить ошибку? Мой код:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
fun buTestUpdateText2 (view: View) {
val changePage = Intent(this, Page2)
// Error: "Please specify constructor invocation;
// classifier 'Page2' does not have a companion object"
startActivity(changePage)
}
}
android
kotlin
android-intent
android-activity
Дж Адонай Дагдаг
источник
источник
Ответы:
Чтобы запустить
Activity
написанное нами на javaIntent(this, Page2.class)
, в основном вам нужно определитьContext
первый параметр и класс назначения во втором параметре. СогласноIntent
методу в исходном коде -Как видите, нам нужно передать
Class<?>
тип во втором параметре.Написав,
Intent(this, Page2)
мы никогда не указываем, что собираемся передать класс, мы пытаемся передатьclass
тип, который неприемлем.Использование
::class.java
альтернативы.class
котлину. Используйте приведенный ниже код, чтобы начатьActivity
Пример -
источник
::class.java
вместо.class
? Подход Kotlin необычайно сложен по сравнению с Java.class
возвращает KotlinKClass
, но Android ожидает JavaClass<...>
, следовательно,.java
свойство.Просто вы можете начать
Activity
вKOTLIN
с помощью этого метода простой,источник
putExtra
метод. Я просто добавил его для передачи значений при запуске новогоActivity
Чтобы начать новое мероприятие,
Так что измените свой код на:
источник
Обычно вы можете упростить спецификацию параметра
BlahActivity::class.java
, определив встроенную обобщенную универсальную функцию.Потому что это позволяет тебе делать
Или даже проще
Так что сейчас
источник
inline fun <reified T: Activity> Context.createIntent(vararg extras: Pair<String, Any?>) = Intent(this, T::class.java).apply { putExtras(bundleOf(*extras)) }
вместо того, что я сказал, и это будет работать (при условии, что у вас естьbundleOf
android-ktx или anko)Вы должны указать второй аргумент типа класса. Вы также можете сделать его немного более аккуратным, как показано ниже.
источник
Попробуй это
источник
Это моя основная деятельность, когда я беру имя пользователя и пароль из текста редактирования и настройки на намерение
Это мое второе занятие, в котором я должен получать значения от основного действия.
источник
Это связано с тем, что у вашего
Page2
класса нет сопутствующего объекта, который похож наstatic
Java, чтобы использовать ваш класс. Чтобы передать свой класс в качестве аргументаIntent
, вам нужно будет сделать что-то вроде этогоисточник
От деятельности к деятельности
От фрагмента к действию
источник
Что ж, я нашел эти 2 способа самыми простыми из всех:
Способ №1:
Способ №2: (В общем)
источник
источник
У меня была аналогичная проблема, я начал писать свое приложение на Kotlin, после того, как я переписал одно из своих действий, я хотел увидеть, есть ли какие-либо проблемы, проблема заключалась в том, что я не был уверен, как отправить намерение из java файла в kotlin файл.
В этом случае я создал статическую функцию в kotlin (сопутствующий объект), эта функция получает контекст (из текущего действия) и возвращает новое намерение при использовании текущего контекста (контекст "java") при использовании класса kotlin (" :: class.java ").
Вот мой код:
источник
@JvmStatic
в свойnewIntent
метод, вы можете вызвать его из java безCompanion
части.подробности
Шаг 1. Заявление ()
Шаг 2. Добавьте объект Router
использование
источник
Не забудьте добавить действие, которое вы хотите представить, к вашему
AndroidManifest.xml
тоже :-) Это было проблемой для меня.источник
Как насчет того, чтобы рассмотреть инкапсуляцию?
Например:
источник
Вы можете использовать в своем приложении как файлы Kotlin, так и файлы Java.
Чтобы переключаться между двумя файлами, убедитесь, что вы дали им уникальный <action android: name = "" в AndroidManifest.xml, например:
Затем в вашем MainActivity.kt (файл Kotlin), чтобы запустить действие, написанное на Java, сделайте следующее:
В вашем MainActivityJava.java (файл Java), чтобы запустить действие, написанное на Kotlin, сделайте следующее:
источник
еще один простой способ перехода к другому виду деятельности -
источник