Я реализовал базовый MVP, в котором модель имеет набор сообщений, которые отображаются круговым способом для пользователя при касании экрана.Каждое сообщение инкапсулируется в класс State
и передается в реализацию CircularModel
.
Это код Viewer, который я использовал для создания экземпляра модели и презентатора (это законно, что они создаются Viewer?), а также раздел для восстановления состояния модели:
class MainActivity : AppCompatActivity(), ViewMVC {
private lateinit var presenter: Presenter
private lateinit var model : Model
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
model = if(savedInstanceState == null ) { CircularModel(LinkedList<State>(Arrays.asList(
State("First"),
State("Second"),
State("Third"),
State("Fourth"),
State("Fifth")
)))
} else {
savedInstanceState.getParcelable<Model>("model")
}
presenter = PresenterImpl(this, model)
}
// Rest of Viewer's code...
}
Поскольку я хочу сохранить состояние CirciularModel
, я сделал это @Parcelize
:
@Parcelize
class CircularModel constructor(var states: @RawValue Deque<State>?) : Model, Parcelable {
...
}
Тем не менее, таким образом у меня есть предупреждение о несоответствии типов Model
и Model?
.Однако, если я объявляю private lateinit var model : Model?
, я получаю сообщение об ошибке, что lateinit
не может быть использован с типами, допускающими обнуляемость.
Как я могу решить эту проблему?Что-то не так в реализации шаблона?