как поставить лайк видосу еще раз?!))) Я целый день тупил не знал, как решить проблему(( посмотрел 15 минут видео и все?! нет, ты понимаешь?! и все решилось!! почему я раньше не увидел этот видос! крутяк!
Еще стоит отметить, что если делать прям так, как на видео, то можно столкнуться с фризами приложения при пересчете списка, если список будет достаточно большим, поскольку операция выполняется на ui треде. Для потенциально больших списков лучше использовать AsyncListDiffer, в котором уже за вас сделана работа в другом треде.
А вот зря, что не разобрался с ConstraintLayout. Очень удобный. Я после него на RelativeLayout смотреть не могу. Уродство сплошное. Хотя, обычно в макетах всяко соблюдается линейная структура, поэтому родитель Linear, а внутри обычно Frame или Constraint, потому что типа как бы нельзя делать иерархию LinearLayout друг в друге. ps: У Constraint есть некоторые кривоватости. 1. Например, есть Group в которые можно положить группу элементом и менять визибили сразу у всей группы. Вроде бы норм. Но после этого становится нельзя менять визибилити отдельного элемента, что странно. Я поначалу подумал, что прикольно насоздавать групп, если логика подразумевает скрытие части элементов, и помещать группы в группы, но чота видимо в гугле до этого не додумались. 2. барьеры. на новейших AS не пробовал, но вроде как пока на превью интерфейс не отрисовывается правильно.
@@MobileDeveloper , из бест практисов считается что вложенные линеары с весами увеличивают нагрузки на расчет размеров. На мой взгляд верстку констрейна читать сильно легче, чем релейтива. Да пилить тоже легче.
constraint создан для уплощения иерархии вьюх, а это значит - плюс к производительности. Один из моих любимых лэйаутов. Использую следующие его фичи: chains, aspect ratio, guidline, group, percent. Он внутри себя решает системы линейных уравнений еще. Вроде в IOS есть его подобие AutoLayout, не занимаюсь IOS
Хорошее продолжение. А как сбайнить только часть полей, например если не нужно перерисовывать полностью а только конкретное поле.Раньше это делалось с использованием полей payloads а как это делается если используется только одна переменная мутабельного значения для датабайнинга?
Недавно понадобилось сделать поддержку пагинации в RecyclerView. Решил воспользоваться гугловым. Там где нужно выбрать от какого DataSource наследоваться, и использовать PagedListAdapter. Вот тут то я увидел, что хэдер не так и просто сделать добавив к getItemCount размер данных + 1. Хрень получается. Не встречался с таким? По быстрому разобрался с этим, проверяя что на вьюхолдер биндится нулевой элемент и показывая скрытую на других позициях ViewGroup.
@@MobileDeveloper , как вариант на будущее буду так делать. Просто не хотелось менять список данных и их тип, создавая родительский класс и т д(да, я все ещё на Java). Это больше кода, чем проверять нулевой элемент
Потому что я старовер :D это часть правды а ещё одна часть, потому что придётся логику писать типа if image == null, а если разные image должны вести на разные формы тогда как?
@@MobileDeveloper Когда логика усложняется, то старый подход покрасивей будет. Хотя я пробовал разные варианты и в принципе неплохо смотрелись: 1. создавал sealed class в котором модели объектов для каждого viewType, и передавал как параметр объект. А потом с помощью when проверял, какой viewType был нажат. Могу показать свой template для этого, он правда немного не доделан, но в разработке уже применялся.
По поводу оптимизации findViewById рекомендую ознакомиться с proandroiddev.com/kotlin-android-extensions-using-view-binding-the-right-way-707cd0c9e648. По DiffUtil можно посмотреть в сторону ListAdapter, также th-cam.com/video/uhtYuvubVm8/w-d-xo.html.
Синтетику активно юзаю в Активити и фрагментах, не знал что можно и в списках тоже) спасибо! Скоро слава богу все это легко можно будет через compose делать )
@@MobileDeveloper Да, можно. Я как раз переписывал с itemView на containerView (по образцу с LayoutContainer). Знакомый пишет на MVVM, там DataBinding, ему этот рецепт не подошёл.
@@MobileDeveloper незачто. У Вас интересные видео. Я хоть и пишу пока на java, но все равно смотрю, так как SDK то один. Сделайте пожалуйста видео по работе c Room. Думаю будет актуально. Какой-нибудь простой пример - типа TODO
@@MobileDeveloper спасибо за ваши видео, за проделанную работу. Вы там во 2 части говорили, что не хотите возиться с Room в плане построения связей таблиц ввиду нехватки времени. Вы будете делать подробный урок про Room, как его используете в связке с Retrofit с сохранением в связанных внешними связями таблицах?
Тут какое дело ) Если вы походите по комментариям, то думаю найдете под любым видео и комментарии, что ничего не понятно и мало объяснил, и комментарий подобный вашему. Все люди разные, поэтому я ориентируюсь в целом на середину.
как поставить лайк видосу еще раз?!))) Я целый день тупил не знал, как решить проблему(( посмотрел 15 минут видео и все?! нет, ты понимаешь?! и все решилось!! почему я раньше не увидел этот видос! крутяк!
Ни на что не намекаю, но возможно потому что этими видео мало кто делится 😉
Привет. Спасибо за видео. Расскажи еще, пожалуйта, про paging library и про бесконечный список.
Хорошая мысль подумаю, спасибо
Еще стоит отметить, что если делать прям так, как на видео, то можно столкнуться с фризами приложения при пересчете списка, если список будет достаточно большим, поскольку операция выполняется на ui треде. Для потенциально больших списков лучше использовать AsyncListDiffer, в котором уже за вас сделана работа в другом треде.
Да здесь правда. Но обычно такие списки догружают небольшими порциями по 20 штук )
Круто. Спасибо!
А можно это и последующие примеры на гит кидать? Что бы мы могли полазить и посмотреть ещё раз что и как ?
Тоже хочется на гит чтобы заливал
FAIDER29 окей буду пытаться ) часто это в моих рабочих проектах какие то вещи а я не могу их шарить )
Mobile Developer, хорошо. Ещё раз спасибо Вам за вашу деятельность. Благодаря Вам я улучшил свой код и добился стажировки!
FAIDER29 супер! Буду благодарен если поделитесь видео в своих соц сетях )
Вопрос: Вы обращались к recyclerMain без использования findViewById или View Building это как ?
Раньше так можно было ) называлось котлин синтетика)
Давай на Flutter обзорчики!
Будет будет ))
А вот зря, что не разобрался с ConstraintLayout. Очень удобный. Я после него на RelativeLayout смотреть не могу. Уродство сплошное.
Хотя, обычно в макетах всяко соблюдается линейная структура, поэтому родитель Linear, а внутри обычно Frame или Constraint, потому что типа как бы нельзя делать иерархию LinearLayout друг в друге.
ps: У Constraint есть некоторые кривоватости.
1. Например, есть Group в которые можно положить группу элементом и менять визибили сразу у всей группы. Вроде бы норм. Но после этого становится нельзя менять визибилити отдельного элемента, что странно. Я поначалу подумал, что прикольно насоздавать групп, если логика подразумевает скрытие части элементов, и помещать группы в группы, но чота видимо в гугле до этого не додумались.
2. барьеры. на новейших AS не пробовал, но вроде как пока на превью интерфейс не отрисовывается правильно.
Я пока прям адового удобства не заметил + баги. А почему нельзя сделать иерархию из Linear?
@@MobileDeveloper , из бест практисов считается что вложенные линеары с весами увеличивают нагрузки на расчет размеров.
На мой взгляд верстку констрейна читать сильно легче, чем релейтива. Да пилить тоже легче.
Я очень редко использую веса в линейке ) обычно получается как-то без него обойтись )
constraint создан для уплощения иерархии вьюх, а это значит - плюс к производительности. Один из моих любимых лэйаутов. Использую следующие его фичи: chains, aspect ratio, guidline, group, percent. Он внутри себя решает системы линейных уравнений еще. Вроде в IOS есть его подобие AutoLayout, не занимаюсь IOS
margins в constraint не будут работать, пока сторона, где нужен margin, не прианкорена
Хорошее продолжение. А как сбайнить только часть полей, например если не нужно перерисовывать полностью а только конкретное поле.Раньше это делалось с использованием полей payloads а как это делается если используется только одна переменная мутабельного значения для датабайнинга?
Mark Khakimulin хороший вопрос ) изучу скажу ) сейчас нет ответа на ваш вопрос у меня
все суупер
Спасибо!
Недавно понадобилось сделать поддержку пагинации в RecyclerView.
Решил воспользоваться гугловым. Там где нужно выбрать от какого DataSource наследоваться, и использовать PagedListAdapter.
Вот тут то я увидел, что хэдер не так и просто сделать добавив к getItemCount размер данных + 1. Хрень получается.
Не встречался с таким?
По быстрому разобрался с этим, проверяя что на вьюхолдер биндится нулевой элемент и показывая скрытую на других позициях ViewGroup.
Сделайте разные типы ячеек и все ) и хедер проверяйте не по 0 элементу а по Viewtype ) а внутри viewtype по типу модели
@@MobileDeveloper , как вариант на будущее буду так делать. Просто не хотелось менять список данных и их тип, создавая родительский класс и т д(да, я все ещё на Java). Это больше кода, чем проверять нулевой элемент
Ну если это решение подходит то можно и его, а потом отрефакторить. Я все хочу сделать либу в которую хедер и футер встроен по дефолту
Почему вместо interface не используете лямбду? listener: (txt:String?, url:Image?) -> Unit
Потому что я старовер :D это часть правды а ещё одна часть, потому что придётся логику писать типа if image == null, а если разные image должны вести на разные формы тогда как?
@@MobileDeveloper Когда логика усложняется, то старый подход покрасивей будет. Хотя я пробовал разные варианты и в принципе неплохо смотрелись:
1. создавал sealed class в котором модели объектов для каждого viewType, и передавал как параметр объект. А потом с помощью when проверял, какой viewType был нажат. Могу показать свой template для этого, он правда немного не доделан, но в разработке уже применялся.
Да отличный подход )
не встречал такого, чтоб все айтемы наследовались от sealed класса. Обычно вместо него используют интерфейс.
Так это разные вещи ) sealed class позволяет гарантированно закрыть when потом )
@@MobileDeveloper да, идея хорошая. Запомню себе))))
Рад, что помог ) я сейчас почти все через sealed class делаю )
По поводу оптимизации findViewById рекомендую ознакомиться с proandroiddev.com/kotlin-android-extensions-using-view-binding-the-right-way-707cd0c9e648. По DiffUtil можно посмотреть в сторону ListAdapter, также th-cam.com/video/uhtYuvubVm8/w-d-xo.html.
Синтетику активно юзаю в Активити и фрагментах, не знал что можно и в списках тоже) спасибо! Скоро слава богу все это легко можно будет через compose делать )
@@MobileDeveloper Да, можно. Я как раз переписывал с itemView на containerView (по образцу с LayoutContainer). Знакомый пишет на MVVM, там DataBinding, ему этот рецепт не подошёл.
А где ссылка, в которой описан подход делегатов?
Вот что бывает когда видео писал месяц назад ) Добавил спасибо )
@@MobileDeveloper незачто. У Вас интересные видео. Я хоть и пишу пока на java, но все равно смотрю, так как SDK то один.
Сделайте пожалуйста видео по работе c Room. Думаю будет актуально. Какой-нибудь простой пример - типа TODO
Во вкладке сообщество посмотрите видео последние. Там во второй части как раз есть про Room
@@MobileDeveloper непременно посмотрю. Спасибо!
@@MobileDeveloper спасибо за ваши видео, за проделанную работу. Вы там во 2 части говорили, что не хотите возиться с Room в плане построения связей таблиц ввиду нехватки времени. Вы будете делать подробный урок про Room, как его используете в связке с Retrofit с сохранением в связанных внешними связями таблицах?
Ссылки на статью в описании нет((
Добавил, спасибо!
Как же всё многословно для такой базовой функциональности для мобильных приложений :)
Тут какое дело ) Если вы походите по комментариям, то думаю найдете под любым видео и комментарии, что ничего не понятно и мало объяснил, и комментарий подобный вашему. Все люди разные, поэтому я ориентируюсь в целом на середину.