Где объявлять переменные и функции, используемые во всех действиях приложения (Kotlin)

#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. Прошу прощения, я только что увидел, что у вас уже был такой же подход. Не стесняйтесь снимать пометку с ответа, если считаете это необходимым. Однако, что касается вашей проблемы, пока вы очищаете массив и повторно заполняете его в нужное время, я не понимаю, почему это не было бы эффективным подходом.