class MyFragment : BaseFragment {
private lateinit var myPresenter: Contract.MyPresenter
override lateinit var adapter: MyAdapter
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
myPresenter.view = this
adapter = MyAdapter(
myPresenter,
this,
this
)
recyclerView.adapter = adapter
}
Я структурировал этот тип классов во многих местах в моем приложении. Я обнаружил, что пользователи получают много сбоев, и они обычно UninitializedPropertyAccessException
. Прежде чем вы скажете, что я должен сделать мою переменную обнуляемой, я думаю, что проблема больше.
Это нормально работает, если вы делаете простое тестирование - откройте приложение и протестируйте. Что ж, если вы откроете тот же фрагмент, нажмите home, а затем закроете процесс приложения и позже попытаетесь повторно открыть приложение, это выдаст ошибку lateinit
переменных. Как мы должны обойти эту ошибку? Я использую MVP и MVVM в своих приложениях, так что это означает, что крайне важно сохранить Presenters
или ViewModels
с его данными, потому что, когда процесс завершается, данные теряются, а затем, когда пользователь пытается взаимодействовать с приложением - если переменная установлена в lateinit - мы получаем ошибку. Если мы установим его как обнуляемый, мы не получим ошибку, но, тем не менее, у нас будет непредвиденное поведение приложения. Мы не хотим этого ...
Как правильно (примеры были бы хорошими) сохранить все связанные с пользовательским интерфейсом вещи (обзоры переработчиков, экземпляры адаптеров и т. Д.) С Экземпляры ViewModel / Presenter?