У вас на картинке не тот Майк Шеридан; приведённый вами — это датский диджей, родившийся в 1991-м году, и по этой причине вряд ли принимавший участие в Stealth Project, запущенном в декабре 1990-го. Пруф.
> Не в IT работы нет.
Подтверждаю: месяц назад был в Италии, снимал там комнатку в квартире. Разговорился как-то с хозяйкой, и она, натурально, была шокирована тем, что и я и моя девушка нашли работу по специальности не после выпуска, а ещё учась в университете. Сказала, что около 40% выпускников итальянских вузов не могут найти работу по специальности, и что её дочка быстрее нашла работу в Мексике, чем дома в Италии.
Ну и да, дочка не в IT работает.
Ну, тут спорить не могу, потому что с субъективным мнением не поспоришь. :) Спасибо, что ответили, теперь буду знать, что мир не ограничивается любителями meaningful motion и shared elements.
добавлено навязывание теней, которые стягивают на себя внимание
Тени добавлены не просто так, а чтобы показывать иерархию контента, и направление его движения при прокрутке/анимациях.
добавлено навязывание fab, который закрывает чать контента и постоянно двигается
Нет никакого навязывания, не хотите — не используйте. Я вот в одном из своих приложений не использую.
добавлен ripple, который странный
Это субъективно, мне вот нравится видеть отклик поверхности при нажатии на неё.
добавлен circular reveal
Полагаю, к нему претензии такие же, как и к ripple? Ответ такой же: 1) Мне нравится видеть анимацию открытия нового окна/виджета, она наглядно показывает связь между предыдущим и текущим окном и 2) Никто не заставляет её использовать — за все полтора-два года существования MD я circular reveal видел только в приложении Рокетбанка, который был добавлен туда только в феврале этого года, да ещё и на экран, на который я почти не захожу.
Я не наезжаю, просто ваш комментарий выглядит так, будто злой Google заставляет всех использовать fabы и ripple везде и всюду, и бьёт по рукам, если этого не делать. Не хотите вставлять fab — используйте свою кастомную кнопку, не хотите, чтобы был ripple-эффект при нажатии на виджет — используйте в качестве background drawables без ripple-эффекта, а чтобы не было circular reveal так и вообще ничего делать не нужно — он не добавляется автоматически к каждому экрану, а пишется руками. А когда вы будете заливать своё приложение в Play Market, никто вам ничего не скажет. Фичерить ваше приложение не станут, да и в результатах поисковой выдачи по Play Market (тут могу ошибаться, но по моему адаптация Material Design влияет на ранжирование) ваше приложение будет ниже остальных, но банить с мотивацией: «Не соответствет канонам MD» вас никто не станет.
Спорный вопрос, считать ли несчастием ситуацию, в которую Google залез самостоятельно. Слушал вчера выпуск подкаста Triangulation с Джеймсом Гослингом, и там он напрямик говорил, что Google в самом начале создания Android приходил к Sun, и просил дать им лицензию на использование Java на Android-устройствах. Бесплатно. Не смотря на то, что лицензия стоила денег, и разработчики Sun как бы не за идею работали. Им предложили индивидуальную стоимость лицензии, дешевле чем остальным, но и это Google не устроило — хотели получить лицензию бесплатно.
Так что тут скорее «За что боролись — на то и напоролись».
Rx мне очень даже нравится… Ребята из Netflix явные молодцы.
Ну, если посмотреть по статистике коммитов, то на первом месте окажется akarnokd, автор reactive4java (первой реализации reactive extensions для JVM), никак не связанный с Netflix. Так что его тоже не стоит забывать. :)
Я читал её. :) Тут конечно можно поспорить, что он ссылается на стандарт Гугла по написанию Java кода в общем, а не на стандарт по написанию Java кода для Android приложений, но, так как он меня убедил, и я больше венгерскую нотацию использовать не буду, то занудствовать я тут не стану. :)
Почему все решили, что надо везде фигачить эти префиксы m?
Насчет того, что "Гугл об этом говорит", я не уверен (если и говорит, то делает это крайне непоследовательно). Если посмотреть примеры от Гугла, то там венгерская нотация используется и в хвост и гриву. Официальная документация от Гугла тоже использует эту нотацию. В многих учебниках по Android от сторонних авторов, не связанных с Google, она тоже используется. В общем в начале изучения разработки под Android эту привычку проще подхватить, чем не заметить.
Вообще, чтобы совсем уж абстрагироваться, ItemListView должен не наследоваться от ListView напрямую, а реализовывать какой-нибудь интерфейс IItemListView, и содержать ListView внутри. Тогда клиенты не будут знать о его реализации ничего, и замена ListView на RecyclerView пройдёт относительно безболезненно.
P.S. Написал и сам тут же понял, какую глупость сморозил. Это же view, нам его потом инфлейтить нужно, поэтому такой финт не пройдёт.
Да, спасибо за разъяснения, опасения и правда оправданные. Я вот сейчас посмотрел пример от Square, который использует Mortar, и в нём часть ваших претензий учтена: адаптер создаётся внутри ChatListView, а наружу торчит метод showConversations(), который принимает список чатов, и прокидывает их в адаптер. Ничто не мешает, правда, в текущей реализации установить свой адаптер, но можно эту ситуацию обойти как-нибудь вот так:
@Override
public final void setAdapter(ListAdapter adapter) {
throw new UnsupportedOperationException("Use ChatListView#showConversations(List<Chat> chats) instead");
}
OnItemClickListener в примере тоже устанавливается через ChatListView.
Я статью перевёл не для того, чтобы оповестить всех о новой серебряной пуле, а чтобы показать на возможные альтернативы, которые тоже могут быть не лишены недостатков (сам я Flow/Mortar, признаюсь, пока что не использовал). В той же статье от BigNerdRanch, которую упоминали ниже, жаловались на большое количество boilerplate, которое получается при их использовании.
Извините, немного не понял вас. Куда его нужно передавать?
… если потребуется перейти со старого ListView на новый RecyclerView?
Перейти с ListView на RecyclerView будет в любом случае непросто, вне зависимости от того, используете вы фрагменты или нет. Опять-таки, уточните, пожалуйста, что вы имели в виду.
Попробуйте нарисовать самостоятельно такой же граф жизненного цикла для View, как приводится для фрагментов, проще он будет не намного.
Тот граф, что я нашёл, выглядит гораздо проще чем у фрагментов. Покажете более полный?
А можете в таком случае порекомендовать что-нибудь более фундаментальное? SOLID, GRASP, вот это всё. То есть я знаю, что такое SOLID но хочется чего-то более объемного, чем статья на википедии — с примерами того как надо и как не надо, с какими-то смежными концепциями и так далее.
Добавление к разделу «Что почитать»: если Банда Четырёх покажется сложноватой, то можно начать с «Head First Design Patterns» от O'Reilly. Тоже очень достойная книга по шаблонам проектирования.
switch на строках доступен начиная с Android 2.2 (пруф, смотреть 'ADT 22.6.0'), а Android Dashboards не учитывают ничего, младше 2.2. Похоже, что устройств, на которых новый switch не заработает, настолько мало, что можно было бы не заморачиваться.
Хотя я зловредов не писал, и мотивации создателей не знаю — может быть они как раз озабочены тем, чтобы их код выполнялся на максимальном количестве устройств.
Тут следовало бы использовать case, но автор не в курсе, как сравнивать строки в JAVA
Или он не в курсе, что на Андроид давно уже завезли Java 7, и строки в switch теперь можно использовать. Или же зловред писался пару лет назад, когда можно было использовать только Java 6.
Подтверждаю: месяц назад был в Италии, снимал там комнатку в квартире. Разговорился как-то с хозяйкой, и она, натурально, была шокирована тем, что и я и моя девушка нашли работу по специальности не после выпуска, а ещё учась в университете. Сказала, что около 40% выпускников итальянских вузов не могут найти работу по специальности, и что её дочка быстрее нашла работу в Мексике, чем дома в Италии.
Ну и да, дочка не в IT работает.
Тени добавлены не просто так, а чтобы показывать иерархию контента, и направление его движения при прокрутке/анимациях.
Нет никакого навязывания, не хотите — не используйте. Я вот в одном из своих приложений не использую.
Это субъективно, мне вот нравится видеть отклик поверхности при нажатии на неё.
Полагаю, к нему претензии такие же, как и к ripple? Ответ такой же: 1) Мне нравится видеть анимацию открытия нового окна/виджета, она наглядно показывает связь между предыдущим и текущим окном и 2) Никто не заставляет её использовать — за все полтора-два года существования MD я circular reveal видел только в приложении Рокетбанка, который был добавлен туда только в феврале этого года, да ещё и на экран, на который я почти не захожу.
Я не наезжаю, просто ваш комментарий выглядит так, будто злой Google заставляет всех использовать fabы и ripple везде и всюду, и бьёт по рукам, если этого не делать. Не хотите вставлять fab — используйте свою кастомную кнопку, не хотите, чтобы был ripple-эффект при нажатии на виджет — используйте в качестве background drawables без ripple-эффекта, а чтобы не было circular reveal так и вообще ничего делать не нужно — он не добавляется автоматически к каждому экрану, а пишется руками. А когда вы будете заливать своё приложение в Play Market, никто вам ничего не скажет. Фичерить ваше приложение не станут, да и в результатах поисковой выдачи по Play Market (тут могу ошибаться, но по моему адаптация Material Design влияет на ранжирование) ваше приложение будет ниже остальных, но банить с мотивацией: «Не соответствет канонам MD» вас никто не станет.
Так что тут скорее «За что боролись — на то и напоролись».
Ну, если посмотреть по статистике коммитов, то на первом месте окажется akarnokd, автор reactive4java (первой реализации reactive extensions для JVM), никак не связанный с Netflix. Так что его тоже не стоит забывать. :)
Вопрос лучше адресовать автору оригинальной статьи.
Насчет того, что "Гугл об этом говорит", я не уверен (если и говорит, то делает это крайне непоследовательно). Если посмотреть примеры от Гугла, то там венгерская нотация используется и в хвост и гриву. Официальная документация от Гугла тоже использует эту нотацию. В многих учебниках по Android от сторонних авторов, не связанных с Google, она тоже используется. В общем в начале изучения разработки под Android эту привычку проще подхватить, чем не заметить.
P.S. Написал и сам тут же понял, какую глупость сморозил. Это же view, нам его потом инфлейтить нужно, поэтому такой финт не пройдёт.
ChatListView
, а наружу торчит методshowConversations()
, который принимает список чатов, и прокидывает их в адаптер. Ничто не мешает, правда, в текущей реализации установить свой адаптер, но можно эту ситуацию обойти как-нибудь вот так:OnItemClickListener
в примере тоже устанавливается черезChatListView
.Я статью перевёл не для того, чтобы оповестить всех о новой серебряной пуле, а чтобы показать на возможные альтернативы, которые тоже могут быть не лишены недостатков (сам я Flow/Mortar, признаюсь, пока что не использовал). В той же статье от BigNerdRanch, которую упоминали ниже, жаловались на большое количество boilerplate, которое получается при их использовании.
Извините, немного не понял вас. Куда его нужно передавать?
Перейти с ListView на RecyclerView будет в любом случае непросто, вне зависимости от того, используете вы фрагменты или нет. Опять-таки, уточните, пожалуйста, что вы имели в виду.
Тот граф, что я нашёл, выглядит гораздо проще чем у фрагментов. Покажете более полный?
В статье всё-таки приводится пример, а не production-code. Да, такой код легко ломается, лучше искать view через findViewById().
Хотя я зловредов не писал, и мотивации создателей не знаю — может быть они как раз озабочены тем, чтобы их код выполнялся на максимальном количестве устройств.
Или он не в курсе, что на Андроид давно уже завезли Java 7, и строки в switch теперь можно использовать. Или же зловред писался пару лет назад, когда можно было использовать только Java 6.