UI/UX - RecyclerView. Часть 2. Clicks, DiffUtils. [RU, Android] / Мобильный разработчик

แชร์
ฝัง
  • เผยแพร่เมื่อ 19 พ.ย. 2024

ความคิดเห็น • 61

  • @РусланСамарбаев
    @РусланСамарбаев 3 ปีที่แล้ว +1

    как поставить лайк видосу еще раз?!))) Я целый день тупил не знал, как решить проблему(( посмотрел 15 минут видео и все?! нет, ты понимаешь?! и все решилось!! почему я раньше не увидел этот видос! крутяк!

    • @MobileDeveloper
      @MobileDeveloper  3 ปีที่แล้ว +1

      Ни на что не намекаю, но возможно потому что этими видео мало кто делится 😉

  • @sjsjjdnjisjwjeuudn
    @sjsjjdnjisjwjeuudn 4 ปีที่แล้ว +3

    Привет. Спасибо за видео. Расскажи еще, пожалуйта, про paging library и про бесконечный список.

    • @MobileDeveloper
      @MobileDeveloper  4 ปีที่แล้ว +3

      Хорошая мысль подумаю, спасибо

  • @sjsjjdnjisjwjeuudn
    @sjsjjdnjisjwjeuudn 4 ปีที่แล้ว

    Еще стоит отметить, что если делать прям так, как на видео, то можно столкнуться с фризами приложения при пересчете списка, если список будет достаточно большим, поскольку операция выполняется на ui треде. Для потенциально больших списков лучше использовать AsyncListDiffer, в котором уже за вас сделана работа в другом треде.

    • @MobileDeveloper
      @MobileDeveloper  4 ปีที่แล้ว +1

      Да здесь правда. Но обычно такие списки догружают небольшими порциями по 20 штук )

  • @FAIDER29
    @FAIDER29 5 ปีที่แล้ว +2

    Круто. Спасибо!
    А можно это и последующие примеры на гит кидать? Что бы мы могли полазить и посмотреть ещё раз что и как ?

    • @OverNoobDmg
      @OverNoobDmg 5 ปีที่แล้ว

      Тоже хочется на гит чтобы заливал

    • @MobileDeveloper
      @MobileDeveloper  5 ปีที่แล้ว +1

      FAIDER29 окей буду пытаться ) часто это в моих рабочих проектах какие то вещи а я не могу их шарить )

    • @FAIDER29
      @FAIDER29 5 ปีที่แล้ว +1

      Mobile Developer, хорошо. Ещё раз спасибо Вам за вашу деятельность. Благодаря Вам я улучшил свой код и добился стажировки!

    • @MobileDeveloper
      @MobileDeveloper  5 ปีที่แล้ว

      FAIDER29 супер! Буду благодарен если поделитесь видео в своих соц сетях )

  • @voicetv9048
    @voicetv9048 ปีที่แล้ว

    Вопрос: Вы обращались к recyclerMain без использования findViewById или View Building это как ?

    • @MobileDeveloper
      @MobileDeveloper  ปีที่แล้ว +1

      Раньше так можно было ) называлось котлин синтетика)

  • @ruslan_popesku
    @ruslan_popesku 5 ปีที่แล้ว +4

    Давай на Flutter обзорчики!

  • @ki16or
    @ki16or 5 ปีที่แล้ว +4

    А вот зря, что не разобрался с ConstraintLayout. Очень удобный. Я после него на RelativeLayout смотреть не могу. Уродство сплошное.
    Хотя, обычно в макетах всяко соблюдается линейная структура, поэтому родитель Linear, а внутри обычно Frame или Constraint, потому что типа как бы нельзя делать иерархию LinearLayout друг в друге.
    ps: У Constraint есть некоторые кривоватости.
    1. Например, есть Group в которые можно положить группу элементом и менять визибили сразу у всей группы. Вроде бы норм. Но после этого становится нельзя менять визибилити отдельного элемента, что странно. Я поначалу подумал, что прикольно насоздавать групп, если логика подразумевает скрытие части элементов, и помещать группы в группы, но чота видимо в гугле до этого не додумались.
    2. барьеры. на новейших AS не пробовал, но вроде как пока на превью интерфейс не отрисовывается правильно.

    • @MobileDeveloper
      @MobileDeveloper  5 ปีที่แล้ว

      Я пока прям адового удобства не заметил + баги. А почему нельзя сделать иерархию из Linear?

    • @ki16or
      @ki16or 5 ปีที่แล้ว +1

      @@MobileDeveloper , из бест практисов считается что вложенные линеары с весами увеличивают нагрузки на расчет размеров.
      На мой взгляд верстку констрейна читать сильно легче, чем релейтива. Да пилить тоже легче.

    • @MobileDeveloper
      @MobileDeveloper  5 ปีที่แล้ว

      Я очень редко использую веса в линейке ) обычно получается как-то без него обойтись )

    • @user-xl2tf4gq1g
      @user-xl2tf4gq1g 5 ปีที่แล้ว +2

      constraint создан для уплощения иерархии вьюх, а это значит - плюс к производительности. Один из моих любимых лэйаутов. Использую следующие его фичи: chains, aspect ratio, guidline, group, percent. Он внутри себя решает системы линейных уравнений еще. Вроде в IOS есть его подобие AutoLayout, не занимаюсь IOS

    • @user-xl2tf4gq1g
      @user-xl2tf4gq1g 5 ปีที่แล้ว

      margins в constraint не будут работать, пока сторона, где нужен margin, не прианкорена

  • @markkhakimulin592
    @markkhakimulin592 5 ปีที่แล้ว

    Хорошее продолжение. А как сбайнить только часть полей, например если не нужно перерисовывать полностью а только конкретное поле.Раньше это делалось с использованием полей payloads а как это делается если используется только одна переменная мутабельного значения для датабайнинга?

    • @MobileDeveloper
      @MobileDeveloper  5 ปีที่แล้ว

      Mark Khakimulin хороший вопрос ) изучу скажу ) сейчас нет ответа на ваш вопрос у меня

  • @lunamarsword
    @lunamarsword 5 ปีที่แล้ว

    все суупер

  • @ki16or
    @ki16or 5 ปีที่แล้ว

    Недавно понадобилось сделать поддержку пагинации в RecyclerView.
    Решил воспользоваться гугловым. Там где нужно выбрать от какого DataSource наследоваться, и использовать PagedListAdapter.
    Вот тут то я увидел, что хэдер не так и просто сделать добавив к getItemCount размер данных + 1. Хрень получается.
    Не встречался с таким?
    По быстрому разобрался с этим, проверяя что на вьюхолдер биндится нулевой элемент и показывая скрытую на других позициях ViewGroup.

    • @MobileDeveloper
      @MobileDeveloper  5 ปีที่แล้ว

      Сделайте разные типы ячеек и все ) и хедер проверяйте не по 0 элементу а по Viewtype ) а внутри viewtype по типу модели

    • @ki16or
      @ki16or 5 ปีที่แล้ว

      @@MobileDeveloper , как вариант на будущее буду так делать. Просто не хотелось менять список данных и их тип, создавая родительский класс и т д(да, я все ещё на Java). Это больше кода, чем проверять нулевой элемент

    • @MobileDeveloper
      @MobileDeveloper  5 ปีที่แล้ว

      Ну если это решение подходит то можно и его, а потом отрефакторить. Я все хочу сделать либу в которую хедер и футер встроен по дефолту

  • @AndrewZayts14
    @AndrewZayts14 5 ปีที่แล้ว

    Почему вместо interface не используете лямбду? listener: (txt:String?, url:Image?) -> Unit

    • @MobileDeveloper
      @MobileDeveloper  5 ปีที่แล้ว +1

      Потому что я старовер :D это часть правды а ещё одна часть, потому что придётся логику писать типа if image == null, а если разные image должны вести на разные формы тогда как?

    • @AndrewZayts14
      @AndrewZayts14 5 ปีที่แล้ว

      @@MobileDeveloper Когда логика усложняется, то старый подход покрасивей будет. Хотя я пробовал разные варианты и в принципе неплохо смотрелись:
      1. создавал sealed class в котором модели объектов для каждого viewType, и передавал как параметр объект. А потом с помощью when проверял, какой viewType был нажат. Могу показать свой template для этого, он правда немного не доделан, но в разработке уже применялся.

    • @MobileDeveloper
      @MobileDeveloper  5 ปีที่แล้ว +1

      Да отличный подход )

  • @pavlosoia
    @pavlosoia 3 ปีที่แล้ว

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

    • @MobileDeveloper
      @MobileDeveloper  3 ปีที่แล้ว +1

      Так это разные вещи ) sealed class позволяет гарантированно закрыть when потом )

    • @pavlosoia
      @pavlosoia 3 ปีที่แล้ว

      @@MobileDeveloper да, идея хорошая. Запомню себе))))

    • @MobileDeveloper
      @MobileDeveloper  3 ปีที่แล้ว +1

      Рад, что помог ) я сейчас почти все через sealed class делаю )

  • @alexandernifanin7366
    @alexandernifanin7366 4 ปีที่แล้ว

    По поводу оптимизации findViewById рекомендую ознакомиться с proandroiddev.com/kotlin-android-extensions-using-view-binding-the-right-way-707cd0c9e648. По DiffUtil можно посмотреть в сторону ListAdapter, также th-cam.com/video/uhtYuvubVm8/w-d-xo.html.

    • @MobileDeveloper
      @MobileDeveloper  4 ปีที่แล้ว +1

      Синтетику активно юзаю в Активити и фрагментах, не знал что можно и в списках тоже) спасибо! Скоро слава богу все это легко можно будет через compose делать )

    • @alexandernifanin7366
      @alexandernifanin7366 4 ปีที่แล้ว

      @@MobileDeveloper Да, можно. Я как раз переписывал с itemView на containerView (по образцу с LayoutContainer). Знакомый пишет на MVVM, там DataBinding, ему этот рецепт не подошёл.

  • @mrrobot8923
    @mrrobot8923 5 ปีที่แล้ว

    А где ссылка, в которой описан подход делегатов?

    • @MobileDeveloper
      @MobileDeveloper  5 ปีที่แล้ว

      Вот что бывает когда видео писал месяц назад ) Добавил спасибо )

    • @mrrobot8923
      @mrrobot8923 5 ปีที่แล้ว +1

      @@MobileDeveloper незачто. У Вас интересные видео. Я хоть и пишу пока на java, но все равно смотрю, так как SDK то один.
      Сделайте пожалуйста видео по работе c Room. Думаю будет актуально. Какой-нибудь простой пример - типа TODO

    • @MobileDeveloper
      @MobileDeveloper  5 ปีที่แล้ว

      Во вкладке сообщество посмотрите видео последние. Там во второй части как раз есть про Room

    • @mrrobot8923
      @mrrobot8923 5 ปีที่แล้ว

      @@MobileDeveloper непременно посмотрю. Спасибо!

    • @user-xl2tf4gq1g
      @user-xl2tf4gq1g 5 ปีที่แล้ว

      @@MobileDeveloper спасибо за ваши видео, за проделанную работу. Вы там во 2 части говорили, что не хотите возиться с Room в плане построения связей таблиц ввиду нехватки времени. Вы будете делать подробный урок про Room, как его используете в связке с Retrofit с сохранением в связанных внешними связями таблицах?

  • @nightscream3687
    @nightscream3687 5 ปีที่แล้ว

    Ссылки на статью в описании нет((

  • @dmitriyobidin6049
    @dmitriyobidin6049 4 ปีที่แล้ว

    Как же всё многословно для такой базовой функциональности для мобильных приложений :)

    • @MobileDeveloper
      @MobileDeveloper  4 ปีที่แล้ว

      Тут какое дело ) Если вы походите по комментариям, то думаю найдете под любым видео и комментарии, что ничего не понятно и мало объяснил, и комментарий подобный вашему. Все люди разные, поэтому я ориентируюсь в целом на середину.