Size: a a a

Android Architecture

2017 February 08

A

Artur in Android Architecture
У меня более низкоуровневый вопрос. Есть список с элементами, множественное выделение. Этот список лежит в адаптере во фрагменте, тк будет реиспользован. Количество элементов и сами элементы в списке константные.
Презентер фрагмента имеет метод init(List<ViewModel> elements), который просто заполняет список во фрагменте. Там фрагмент просто сам в себе отвечает за переключение элементов (пользователь кликает, сама вьюха меняет viewModel в которой есть boolean checked).

В некоторый момент мне нужно получить текущее состоянии списка, лист моделек, с обновлёнными состояниями. Сам список лежит только внутри адаптера. Эти данные нужны презентеру активити, в которой лежит фрагмент со своим презентером.

Вопрос: как бы вы организовали передачу списка?
mainView.onNextButtonClick() -> mainPresenter.onNextClick() -> mainView.getStates() -> innerView(fragment).getStates() -> (а ещё здесь можно через innerpresenter прогнать...) adapter.getStates()

В этом варианте смущает, что:
1) две вью общаются напрямую (внешняя с внутренней)
2) Получается, у адаптера есть метод getElements() и @xanderblinov, если я не ошибаюсь, выше писал, что они у себя так никогда не делают.
источник

B

Beka in Android Architecture
многобукф)
источник

B

Beka in Android Architecture
1) две вью общаются напрямую (внешняя с внутренней)
Кстати мне легче ассоцировать фрагмента и активти с контролером. Который делает минимальную работу. Получает данные из виюхи и передает сервису (презентеру)
источник

B

Beka in Android Architecture
Вот тогда можно принять то что фрагмент передает данные друг другу)
источник

VI

Vladimir Ivanov in Android Architecture
Artur
У меня более низкоуровневый вопрос. Есть список с элементами, множественное выделение. Этот список лежит в адаптере во фрагменте, тк будет реиспользован. Количество элементов и сами элементы в списке константные.
Презентер фрагмента имеет метод init(List<ViewModel> elements), который просто заполняет список во фрагменте. Там фрагмент просто сам в себе отвечает за переключение элементов (пользователь кликает, сама вьюха меняет viewModel в которой есть boolean checked).

В некоторый момент мне нужно получить текущее состоянии списка, лист моделек, с обновлёнными состояниями. Сам список лежит только внутри адаптера. Эти данные нужны презентеру активити, в которой лежит фрагмент со своим презентером.

Вопрос: как бы вы организовали передачу списка?
mainView.onNextButtonClick() -> mainPresenter.onNextClick() -> mainView.getStates() -> innerView(fragment).getStates() -> (а ещё здесь можно через innerpresenter прогнать...) adapter.getStates()

В этом варианте смущает, что:
1) две вью общаются напрямую (внешняя с внутренней)
2) Получается, у адаптера есть метод getElements() и @xanderblinov, если я не ошибаюсь, выше писал, что они у себя так никогда не делают.
А когда две кнопки при клике на которые меняют состояние видимости - это не смущает? Я про то что чем отличается общение с адаптером от общения с другими вью? как бы вы организовали проверку состояния из одной кнопки - другой. Или при нажатии кнопки "Логин" где бы вы брали логин и пароль в обработчике кнопки или презентере?
источник

B

Beka in Android Architecture
ПО сути этого слоя можно юзать как контроллер. Чисто как клей
источник

A

Artur in Android Architecture
Vladimir Ivanov
А когда две кнопки при клике на которые меняют состояние видимости - это не смущает? Я про то что чем отличается общение с адаптером от общения с другими вью? как бы вы организовали проверку состояния из одной кнопки - другой. Или при нажатии кнопки "Логин" где бы вы брали логин и пароль в обработчике кнопки или презентере?
View в данном случае - компонент MVP. Соответственно, все 3 поля были бы в нужной мне вью.
источник

VI

Vladimir Ivanov in Android Architecture
чем адаптер отличается?
источник

VI

Vladimir Ivanov in Android Architecture
вот надо было бы переиспользовать кнопки.... что бы изменилось?
источник

AZ

Alexandr Zherebtsov in Android Architecture
Artur
У меня более низкоуровневый вопрос. Есть список с элементами, множественное выделение. Этот список лежит в адаптере во фрагменте, тк будет реиспользован. Количество элементов и сами элементы в списке константные.
Презентер фрагмента имеет метод init(List<ViewModel> elements), который просто заполняет список во фрагменте. Там фрагмент просто сам в себе отвечает за переключение элементов (пользователь кликает, сама вьюха меняет viewModel в которой есть boolean checked).

В некоторый момент мне нужно получить текущее состоянии списка, лист моделек, с обновлёнными состояниями. Сам список лежит только внутри адаптера. Эти данные нужны презентеру активити, в которой лежит фрагмент со своим презентером.

Вопрос: как бы вы организовали передачу списка?
mainView.onNextButtonClick() -> mainPresenter.onNextClick() -> mainView.getStates() -> innerView(fragment).getStates() -> (а ещё здесь можно через innerpresenter прогнать...) adapter.getStates()

В этом варианте смущает, что:
1) две вью общаются напрямую (внешняя с внутренней)
2) Получается, у адаптера есть метод getElements() и @xanderblinov, если я не ошибаюсь, выше писал, что они у себя так никогда не делают.
о, кстати, тоже бьюсь над этим вопросом, если я все правильно понял, мне кажется не очень стественным чтоли общение через View, примерно в таком кейсе что у вас
источник

A

Artur in Android Architecture
Vladimir Ivanov
вот надо было бы переиспользовать кнопки.... что бы изменилось?
В моей реализации у кнопки бы не было своего презентера. Сейчас фрагмент притворяется "полноценным" компонентом - он вью и у него есть презентер.

Как вариант, сделать фрагмент имплементайей вью и выкинуть из него презентер...
источник

AZ

Alexandr Zherebtsov in Android Architecture
Artur
В моей реализации у кнопки бы не было своего презентера. Сейчас фрагмент притворяется "полноценным" компонентом - он вью и у него есть презентер.

Как вариант, сделать фрагмент имплементайей вью и выкинуть из него презентер...
@AntonAverin писал про ViewExtensions, очень круто у него все там, но до конца не изучил https://android.jlelse.eu/keep-your-droid-clean-activities-and-fragments-da1799fe1e7a#.aatu5ibbl
источник

VI

Vladimir Ivanov in Android Architecture
если адаптер содержит в себе презентер, то можно было бы его отдавать. Все зависит от того как написан адаптер. Я часто не отделяю внутри одаптера отдельные сущности. Телодвижений много, выхлопа не очень. Но если надо хранить состояние при повороте и восстанавливать его, то презентер всеравно внешний. И в нем должно храниться состояние чекбоксов
источник

Rl

Roman lastName in Android Architecture
А как поступать с viewpagerом где одинаковые фрагменты но с разной информацией? Мне кажется можно сделать один презентер на них
источник

AZ

Alexandr Zherebtsov in Android Architecture
Roman lastName
А как поступать с viewpagerом где одинаковые фрагменты но с разной информацией? Мне кажется можно сделать один презентер на них
фрагменты одного классы в мысле, но разные инстансы? ну да, тогда презентер тоже одного класса будет и разыне инстансы его
источник

N

Nick Senchurin in Android Architecture
а такой вопрос, если у меня на аткивити единственный фрагмент  во весь экран, нужно 2 презентера, или только один, который для фрагмента?
источник

Rl

Roman lastName in Android Architecture
Alexandr Zherebtsov
фрагменты одного классы в мысле, но разные инстансы? ну да, тогда презентер тоже одного класса будет и разыне инстансы его
Фрагменты одного класса, несколько инстансов. А презентер один инстанс. Так хотел. Хотя сейчас уже передумал
источник

AP

Alexey Pushkarev in Android Architecture
Ребят, у меня такой кейс. Есть данные которые нужны на нескольких экранах. Эти данные получаем из сети. Кэшировать вроде бы надобности нет, устраивает каждый раз получать новые. Казалось бы можно хранить эти данные в синглтоне. НО! Возникает проблема, что тогда мне нужно на каждом экране их с сервера получать? Иначе когда приложение вдруг будет свернуто и развернуто, то данные будут нулл если приложение будет убито, и надо их заново получать.  Так может случится на любом из экранов(активити) где нужны данные
источник

AP

Alexey Pushkarev in Android Architecture
так мне получается все же лучше хранить в бд данные?
источник

sm

sasha merkulev in Android Architecture
Alexey Pushkarev
так мне получается все же лучше хранить в бд данные?
Ну еще есть шаредпрефы, но пожалуй зависит от того, что за данные и каких много.
источник