
Andrey
30.08.2017
20:44:04

Anton
30.08.2017
20:45:52
Вот не хотелось бы делать его элементом recyclerView тк на этот recyclerView и его адаптер в частности нагружено много функционала (itemtouchhelper со всякими плюшками, свайпы, перемещения и прочее). Так же сам список может фильтроваться и всячески сортироваться. И наконец, список может содержать несколько видов VH. И, как вы понимаете, во всех тех фичах, что я описал, придется писать такой код, который постоянно учитывает, что первым элементом идёт header, и что не надо его в случае чего "задевать". Я уже не говорю о том, что элементы могут располагаться по особенному, в несколько столбцов с помощью кастомного layoutManagera. Ну и в качестве кульминации я лично считаю, что когда элемент списка i=0 управляет элементами I+1...N - это странный архитектурный подход


Andrey
30.08.2017
20:47:25
Вот не хотелось бы делать его элементом recyclerView тк на этот recyclerView и его адаптер в частности нагружено много функционала (itemtouchhelper со всякими плюшками, свайпы, перемещения и прочее). Так же сам список может фильтроваться и всячески сортироваться. И наконец, список может содержать несколько видов VH. И, как вы понимаете, во всех тех фичах, что я описал, придется писать такой код, который постоянно учитывает, что первым элементом идёт header, и что не надо его в случае чего "задевать". Я уже не говорю о том, что элементы могут располагаться по особенному, в несколько столбцов с помощью кастомного layoutManagera. Ну и в качестве кульминации я лично считаю, что когда элемент списка i=0 управляет элементами I+1...N - это странный архитектурный подход
Все что вы перечислили это просто вопрос хорошей реализации. И все. Если у вас адаптер в который вы передаете делегаты, которые реализуют что вы хотите, вы можете легко управлять и декорировать ваш список. Ровно также просто управлять разными массивами данных, отображать их, прятать, и нотифаить
Вот не хотелось бы делать его элементом recyclerView тк на этот recyclerView и его адаптер в частности нагружено много функционала (itemtouchhelper со всякими плюшками, свайпы, перемещения и прочее). Так же сам список может фильтроваться и всячески сортироваться. И наконец, список может содержать несколько видов VH. И, как вы понимаете, во всех тех фичах, что я описал, придется писать такой код, который постоянно учитывает, что первым элементом идёт header, и что не надо его в случае чего "задевать". Я уже не говорю о том, что элементы могут располагаться по особенному, в несколько столбцов с помощью кастомного layoutManagera. Ну и в качестве кульминации я лично считаю, что когда элемент списка i=0 управляет элементами I+1...N - это странный архитектурный подход
Адаптер и ресайклер вью это компоненты андроида, с довольно неплохим и мощным АПИ, я бы советовал принимать это как + и использовать удобства, нежели принимать как минус и пытаться обойти это )

Google

Anton
30.08.2017
20:49:54
Не спорю) но смотрите, разные эти плюшки, навешанные вокруг адаптера и recyclerView - это как правило разные классы, и каждый должен знать об особенностях списка, а точнее, что первым элементом списка является header. Вам не кажется что получится размазанная логика?

Andrey
30.08.2017
20:50:16
Не спорю) но смотрите, разные эти плюшки, навешанные вокруг адаптера и recyclerView - это как правило разные классы, и каждый должен знать об особенностях списка, а точнее, что первым элементом списка является header. Вам не кажется что получится размазанная логика?
На самом деле, вот что я вам скажу. Я лично так не делал, но читал, что так делали ? Если бы я думал о том, как решить эту проблему, я бы шел по пути делегатов и управлния ими через адаптер


Anton
30.08.2017
20:51:09
Хотя я пока общался с вами примерно у себя в голове сложил архитектурную картинку, как именно эту логику можно держать в "одном месте"
Делегат здесь именно то что нужно
То есть, подводя черту, вы за то, чтобы header все таки был частью списка?

Andrey
30.08.2017
20:52:44
То-есть в просто создаете делегат-класс, который реализует делегат-интерфейс(createItem(layoutId), bindItem(T data)). Реализуете свой делегат, передаете его в конструктор адаптера, тот в методах вызывает методы делегата, а делегат уже управляет созданим view-holdera и тд. Если создать внутри адаптера-фабрику делегатов, можно миксить разные view-type передавая разные делегаты
По-моему даже статья была такая ?
http://hannesdorfmann.com/android/adapter-delegates


Anton
30.08.2017
20:54:36
Спасибо огромное за статью, пошла мимо меня)
Поставил к прочтению
Кстати, если поднимать тему adapter hell, то я избавляю адаптер от перегруженного кода другим способом. У меня вся логика во вью холдерах. С одним паблик методом onBind() который вызывается внутри адаптеровского onBindViewHolder. И да, у вью холдера у меня как правило свой презентер, внутри которого свои интерактры и тд. Уже давно иду по такому пути и радуюсь от гибкости. Никакого прокидывания управления через главный презентер активити! Никаких лишних интерфейсов. Красота)


Andrey
30.08.2017
21:00:19
Кстати, если поднимать тему adapter hell, то я избавляю адаптер от перегруженного кода другим способом. У меня вся логика во вью холдерах. С одним паблик методом onBind() который вызывается внутри адаптеровского onBindViewHolder. И да, у вью холдера у меня как правило свой презентер, внутри которого свои интерактры и тд. Уже давно иду по такому пути и радуюсь от гибкости. Никакого прокидывания управления через главный презентер активити! Никаких лишних интерфейсов. Красота)
Я бы так не делал, потому что я люблю 1 презентер - 1 мейн вью. 1 мейн вью - n subview. И я рассматриваю activity как mainview, a adapter - subview. Он прокидывает события в активити, передавая нужное кол-во информации, активити в презентер, а там уже куда надо. Но если у вас работает, то почему нет)

Google

Andrey
30.08.2017
21:01:52
И я думаю, что в статье таки есть ответ на ваш вопрос. Там у человека получается вью-тайп по делегат-менеджеру, и можно управлять нужными данными из адаптера
все легко, гибко, просто

Artem
30.08.2017
21:05:09
в Thread нельзя вызывать stop(), как же его остановить\уничтожить? есть какой-то заменитель чтоб в него ранебл передать и особо ничего не переписывать? (AsyncTask не катит нужно много рас перезапускать поток)


Anton
30.08.2017
21:08:45
Я попробую. Но и вы подумайте хорошо над моим подходом. Представьте что в вас список из каких то сложных вью, внутри которых могут изменяться данные, летящие, например, по вебсокету. Каждый раз когда что то изменится, ваш презентер должен будет пробежаться по списку, отдать адаптеру команду "обнови то то и то то", и адаптер должен будет найти у себя нужный viewHolder и вызвать у него соответствующие методы на обновление контента. Потом бизнес логика растет, количество изменяемых данных увеличивается, и вы постоянно плодите методы главного презентера, и мучительно тащите всё это до адаптера и до вью холдеров. А в моем решении есть такой плюс, что адаптер один разок забиндился - и далее сам отвечает за свой стейт. Сам куда надо подписывается и сам слушает все интересующие его изменения


Andrey
30.08.2017
21:11:03
Я попробую. Но и вы подумайте хорошо над моим подходом. Представьте что в вас список из каких то сложных вью, внутри которых могут изменяться данные, летящие, например, по вебсокету. Каждый раз когда что то изменится, ваш презентер должен будет пробежаться по списку, отдать адаптеру команду "обнови то то и то то", и адаптер должен будет найти у себя нужный viewHolder и вызвать у него соответствующие методы на обновление контента. Потом бизнес логика растет, количество изменяемых данных увеличивается, и вы постоянно плодите методы главного презентера, и мучительно тащите всё это до адаптера и до вью холдеров. А в моем решении есть такой плюс, что адаптер один разок забиндился - и далее сам отвечает за свой стейт. Сам куда надо подписывается и сам слушает все интересующие его изменения
Просто это уже тема архитектуры. Я стараюсь придерживать клин-арха, а там вроде так не делают. Я подумаю над вашей идеей, и задам позже вопросы


Anton
30.08.2017
21:11:09
А презентер только лишь занимается повеностным менеджментом списка - сеттит его в адаптер, добавляет туда элементы, и тд. Он не занимается поддержкой актуальности контента внутри элементов списка
Поверхностным*
Приятно было пообщаться, спокойной ночи)

Andrey
30.08.2017
21:11:57

Gleb
30.08.2017
21:14:13
Не а я не понял.... чо за культ поклонения дорфману???
(вортон уже не в моде видимо) кто-то хоть сможет объяснить???
если человек - галимый автор-иконописец - да, возможно его песни сладки
но где там реальная рабочая практика не понятно)))
и наверное никто никогда и не узнает
ладно.... сорян
просто ... давно этот вопрос мучал

Andrey
30.08.2017
21:15:05

Artem
30.08.2017
21:15:08

Gleb
30.08.2017
21:15:38

Igor
30.08.2017
21:16:09

Artem
30.08.2017
21:16:17
Хаха)

Gleb
30.08.2017
21:16:26

Artem
30.08.2017
21:31:01
то как на счет замены Thread которую можно остановить?
или..почему не работает interrupt() ?

Google

Andrey
30.08.2017
21:32:28
рекомендую технострим мейлру "Многопоточность в джава"

Gleb
30.08.2017
21:34:05

Stan
30.08.2017
21:46:08

Artem
30.08.2017
21:51:15

Andrey
30.08.2017
21:51:32

Boris
31.08.2017
02:46:27
Знает кто , есть ли метод который может указать порядок данных в интенте? Оформить его к примеру через запятую или с новой строки

Алексей
31.08.2017
03:09:41
Распечатать содержание Bundle?

Boris
31.08.2017
03:21:00
Нет, вот к примеру есть name и description. Он зас пишет n1,d1,n2,d2 . А мне надо отредактировать в n1-d1 <\br> n2-d2
Просто в более читабельный вид, так как эти данные в интенте передаются как текстовое сообщение. А сейчас набор данных через запятую

Алексей
31.08.2017
03:25:20
Кто "щас пишет"? Что вы имеете в виду под "данными в интенте"? Если задача превратить строку одного формата в строку другого формата - сделайте split по запятым, а потом собирайте обратно как хотите.

@
31.08.2017
03:40:19
Хм... странный андроид, deprecated onAttach(Activity a) работает, а
onAttach(Context c) нет

Tipok
31.08.2017
03:45:40
есть onQueryTextChange(String newText) у MaterialSearchView, допустим есть там текст какой-то, но при перевороте телефона и пересоздании всего заново, сначала приходит пустая строка, а потом уже строка с реальным текстом. Почему отправляет пустую строку, как избежать этого события?

@
31.08.2017
03:47:12
проверку на empty() lol

Tipok
31.08.2017
03:47:47

@
31.08.2017
03:49:12
есть еще InputFilter на EditText прикручивается

Tipok
31.08.2017
03:50:01
if (newText != null && newText.length() > 0)
{
fragmentPresenter.showFragment(searchStoreFragment);
} else {
fragmentPresenter.showFragment(mostVisitedStoreFragment);
}
В общем при перевороте сначала попадаю в ELSE, потом 2 событие в IF.
И из-за этого searchStoreFragment - попадаю в onCreate, но до onResume не доходит ЖЦ
т.к. другой фрагмент уже приаттачился и запустился

@
31.08.2017
03:54:04
Поглядел бы сорцы данной вьюхи, че там думать, я так уже половину Sdk перерыл)

Google

Tipok
31.08.2017
03:54:51
вообще вот такой код
new Handler().postDelayed(() -> fragmentPresenter.showFragment(searchStoreFragment), 300); решает проблему, тип первый фрагмент дошел до onResume и потом только начал запускаться второй

Boris
31.08.2017
03:55:30

Tipok
31.08.2017
03:55:54
но было нормик вообще не попадать в это событие с пустым текстом(именно при перевороте)

@
31.08.2017
03:58:05

Boris
31.08.2017
04:03:06

@
31.08.2017
04:04:29
а как ты определил что упаковывает через запятую?

Admin
ERROR: S client not available

Алексей
31.08.2017
04:05:11
А как надо??
Получите из базы все нужные данные, да отформатируйте как душе угодно.

Boris
31.08.2017
04:06:47

Алексей
31.08.2017
04:08:18

Boris
31.08.2017
04:09:18
Да все верно, но что делать если подается список. А до того, как он подается в интент он сформирован через запятую

Алексей
31.08.2017
04:09:42

Boris
31.08.2017
04:10:02
На stackoverflow советуют через Html.fromHtml() делать

Алексей
31.08.2017
04:10:31
Текст смс сообщения? Вы какую-то дичь делаете)

Boris
31.08.2017
04:11:24
Вот топик https://stackoverflow.com/questions/45972507/customize-intent-in-share-button?noredirect=1#comment78904034_45972507

Алексей
31.08.2017
04:13:46
Сделайте руками текстовое сообщение, зачем вы пытаетесь массив туда запихать.
вместо test.toString() сформируйте строку как вам надо

Boris
31.08.2017
04:15:10
Ок, это наверно то что надо. А что за метод?

Google

Boris
31.08.2017
04:16:58
Всем большое спасибо за помощь. Не имел опыта с редактированием строки

Ростислав
31.08.2017
04:19:06
Господа, в приложении есть задача получить файл из памяти с расширением .repositories, как это лучше сделать?
Впихивать библиотеку для этого не хочется. Свою писать - тем более.
Как это реализовать другим путем? Например, через "...открыть с помощью", но так, чтобы файл пришел ко мне в onActivityResult?

Михаил
31.08.2017
04:21:35

Никита
31.08.2017
04:28:35

Ростислав
31.08.2017
04:29:49

Никита
31.08.2017
04:30:49
https://developer.android.com/reference/android/content/Intent.html?hl=ru#ACTION_OPEN_DOCUMENT

57885
31.08.2017
04:34:08
Кто работал с nfc как правильно сделать? в активити pager с фрагметами, во фрагментах recycler с кнопками. как на onClick button повесить запись nfc метки с передачей надписи на кнопке и обратно чтоб при положительной записи изменить состояние кнопки. через callback(и)

Ростислав
31.08.2017
04:40:01

The
31.08.2017
05:05:26
Пацаны, в android studio 3, ретролямбду по умолчанию добавили?(default toolchain)

Алексей
31.08.2017
05:06:05
не ретролямбду, но другой метод поддержки java8.

The
31.08.2017
05:07:22

Алексей
31.08.2017
05:10:46

Dmitry
31.08.2017
05:13:10
Как отключить email о крашрепортах в firebase?
Приходят сообщения о новых ошибках, сначала думал из-за того что включил в консоли сообщения о регрессиях. Я их выключил, а сегодня опять пришли -_-