#android #kotlin
#Android #kotlin
Вопрос:
Я разрабатываю свое первое приложение для Android в Котлине с несколькими действиями. Некоторые функции и переменные должны быть доступны из всех действий.
Я определил класс данных Event
и создал экземпляр eventarray
:
data class Event(
var name: String?,
var last_date: Array<String?>,
var next_date: String?,
var recurence: Int,
var Nr_instances: Int
)
var eventarray = ArrayList<Event>()
Я хочу eventarray
быть видимым и иметь возможность изменять его во всех действиях.
До сих пор я использовал два решения: первое — использовать отдельный файл kotlin Globaldata.kt
(в папке java моего проекта Android studio), в который я помещаю эти объявления. Это как-то работает, но мне интересно, является ли это эффективным решением.
Второе решение, которое я попробовал, — это определить эти переменные и класс данных в отдельном классе BaseActivity и расширить (:) другое действие из этого:
class MainActivity: BaseActivity()
Это как-то чище (я использую BaseActivity для нескольких вещей, включая язык), но это работает только до тех пор, пока мне не нужно расширять действия из другого действия. Например, я определил класс ListAdapter, который простирается от ArrayAdapter<Event>
class MyEventListAdapter(private val context: Activity, private val eventarray: ArrayList<Event>) : ArrayAdapter<Event>(context, R.layout.eventlistlayout, eventarray)
и использует класс данных Event
. В этом втором решении я не могу выйти из BaseActivity
класса. Поэтому класс данных Event
не отображается внутри MyEventListAdpater
.
У меня такая же проблема с функциями ( fun
), которые определены в BaseActivity
. Я хотел бы использовать их в MyEventListAdpater
, но они не видны…
Что бы вы предложили? Должен ли я использовать свое первое решение? Или у вас есть что-нибудь получше?
Большое спасибо.
Ответ №1:
Создайте файл kotlin и назовите его «ext» или что-то в этом роде и добавьте это в файл:
object ext {
val eventArray : ArrayList<Event> = arrayListOf()
}
data class Event(
var name: String?,
var last_date: Array<String?>,
var next_date: String?,
var recurrence: Int,
var Nr_instances: Int
)
Затем вы можете добавлять или удалять элементы следующим образом:
ext.eventArray.add(myEvent)
Комментарии:
1. Спасибо. Где бы вы определили
Event
класс данных в этом случае?2. вы можете сделать это в том же файле, что и ответ, который я дал. Я только что отредактировал его. Если это вам поможет. пожалуйста, примите ответ.
3. @ Mehran: Привет, спасибо. Это работает нормально, но, похоже, это тот же подход, что и мое первое решение с использованием дополнительного файла Kotlin. Идея Na с моим вторым решением. Извините.
4. Прошу прощения, я только что увидел, что у вас уже был такой же подход. Не стесняйтесь снимать пометку с ответа, если считаете это необходимым. Однако, что касается вашей проблемы, пока вы очищаете массив и повторно заполняете его в нужное время, я не понимаю, почему это не было бы эффективным подходом.