2017-02-12 3 views
0

Недавно я видел разговор о Redux. Динамик запрограммировал рабочее приложение без каких-либо классов, просто с константными переменными. Он даже исключил классы в свой файл lint (https://github.com/MartinSeeler/redux-presentation/tree/master/demo).Приложение для Android без классов?

Итак, я попытался сделать то же самое в своих приложениях для Android, которые написаны в Котлине. К сожалению, я получаю следующее сообщение об ошибке, когда я пытаюсь сделать мой MainActivity класс объекта:

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{blog.app.niklas.flyingbytes/blog.app.niklas.flyingbytes.MainActivity}: java.lang.IllegalAccessException: void blog.app.niklas.flyingbytes.MainActivity.<init>() is not accessible from java.lang.Class<android.app.Instrumentation> 
    Caused by: java.lang.IllegalAccessException: void blog.app.niklas.flyingbytes.MainActivity.<init>() is not accessible from java.lang.Class<android.app.Instrumentation> 

Есть ли способ обойти это? Мне очень нравится идея иметь как можно больше одиночных объектов в моем приложении.

Спасибо заранее,

Никлас

+0

Как вы знаете '{AppContainer} из 'response-hot-loader';' не переведен в класс Activity? Это точка входа рендекса Redux в index.js, правильно? –

ответ

0

Как сказал Джеффри, платформа Android управляет вашими действиями, но это также означает, что платформа отвечает за отслеживание экземпляров вашей деятельности, что является целью Singleton.

Таким образом, в то время как вы не можете сделать свою активность объекта, вы можете сделать его Singleton с помощью атрибута android:launchMode в вашем AndroidManifest:

<activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" 
     android:launchMode="singleInstance"> 

Для получения дополнительной информации об атрибуте launchMode (включая другие возможные значения), проверьте Official Documentation

+0

Это выглядит очень интересно, спасибо! –

+0

Я могу запустить в MainActivityKotlin.kt, если я добавлю строку: «примените плагин:« kotlin-android »к файлу приложения' build.gradle'. Без этой строки я получаю ту же ошибку. Обратите внимание, что действие «configure Kotlin for project» в Android Studio добавляет проект kotlin в файл верхнего уровня 'build.gradle' с линией:« apply plugin: 'kotlin''. Уровень версии Kotlin на данный момент составляет 1.1.1. –

2

Вы не можете заменить класс Activity на Котлин объекта на Android, по той же причине вы не создать экземпляр деятельности, называя это конструктор: деятельность управляются по платформе.

Когда вы спросите (через Intent) платформу для Activity, платформа попытается создать экземпляр, вызвав его конструктор с нулевым параметром. Который не существует для объекта, указав указанную ошибку.

Это говорит о том, что некоторые разработчики уклоняются от кадра, данного Android, например mortar, имея только одно действие и используя пользовательскую логику для навигации между видами.

Смежные вопросы