Eugene
@aaa
Aleksey
тайпчекинг, тайпкастинг — такое просто не может пройти адекватное ревью
Разве есть более адекватные вариант работы со списком по суперклассу?
Mike
Разве есть более адекватные вариант работы со списком по суперклассу?
А почему они должны быть по суперклассу? (что бы это ни значило)
Mike
можно завести несколько пар фабрика-список
Aleksey
А почему они должны быть по суперклассу? (что бы это ни значило)
List<AbstractItem> CityItem -> AbstractItem VilleageItem -> AbstractItem
Mike
List<AbstractItem> CityItem -> AbstractItem VilleageItem -> AbstractItem
так, а если в другом адаптере нужны будут CountryItem и CityItem? (Я про сильное связывание)
Aleksey
В случае с AdapterDelegates от Дорфманна у тебя адаптер - это набор делегатов. А уже каждый из делегатов умеет рендерить свой собственный тип айтема.
Aleksey
И я ни разу не видел, как подобное решается "хорошими" способами, без кастинга и чекинга
Aleksey
Список-то в итоге один внутри RecyclerView лежит
Mike
Список-то в итоге один внутри RecyclerView лежит
только что я назвал вариант, где не так
Anton
Такой вопрос. Есть RecyclerView у которого один элемент отображается на весь экран. Так же установлено setItemViewCacheSize(2). Так вот при первой загрузки пока пользователь не скролил список вызывается onBindViewHolder только для нулевого элемента. После первого верелистывания вызывается так же onBindViewHolder для двух элементов вне экрана. Так вот как заставить вызывать onBindViewHolder для элементов вне экрана при первой загрузки до того как он не начал скролить ?
Aleksey
только что я назвал вариант, где не так
Я не понял твой вариант. Алаптер, в котором нужен только один тип айтема?
Mike
Я не понял твой вариант. Алаптер, в котором нужен только один тип айтема?
Адаптер, в котором одной фабрике холдеров соответствует один список (или SparseArray). У каждой фабрики своя коллекция.
Anonymous
Почему вылет идёт в onBindViewHolder(@NonNull final RecyclerView.ViewHolder viewHolder, int position). java.lang.IndexOutOfBoundsException: Index: 15, Size: 15 ?
Mike
Я с таким кейсом не сталкивался пока. :(
Так я не говорю, что сталкивался, я говорю, что можно без говнокода, и это первый вариант, о котором я подумал)
Aleksey
Но в таком случае нужно будет как-то каждой фабрике присвоить свой список, а потом склеить все списки в один для отрисовки на экране.
Mike
Но в таком случае нужно будет как-то каждой фабрике присвоить свой список, а потом склеить все списки в один для отрисовки на экране.
можно в одном списке хранить все айтемы, в другом — фабрики, в том же порядке, пусть они и повторяются
Aleksey
Но и в таком списке будет generic и каждая фабрика будет приводить к нужному ей типу объект
Anton
https://medium.com/google-developers/recyclerview-prefetch-c2f269075710
Спасибо. Из того что написано понял что нужно использовать setInitialPrefetchItemCount(). Попроьовал не помогает. Какое число бы не использовал не помогает
Mike
Но и в таком списке будет generic и каждая фабрика будет приводить к нужному ей типу объект
у списка будет стёртый тип (Any), в фабрику айтемы будут соваться с unchecked cast'ом, но интерфейс будет полностью типобезопасным
Aleksey
А по сути получится тоже самое
Mike
А по сути получится тоже самое
нет, потому что 1) в клиентском коде не будет тайпчекинга/кастинга 2) нельзя будет накодить так, чтобы результат зависел от порядка подключения делегатов
eugenetereshkov
Подскажите, как хранить состояние горизонтальных списков внутри вертикального? Например пролистали первый список, потом проскроллили до 20 горизонтального списка, вренулись о обратно и чтобы первый список в таком же состоянии был
Aleksey
Только сейчас фабрика сама внутри себя знает, какого класса параметры умеет обрабатывать, а в твоем способе это придется делать внутри Adapter.
Mike
нет, потому что 1) в клиентском коде не будет тайпчекинга/кастинга 2) нельзя будет накодить так, чтобы результат зависел от порядка подключения делегатов
я считаю, что ради простоты/производительности можно постирать типы в библиотеке, лишь бы она была покрыта тестами, а вот в клиентском коде — сомнительно
Aleksey
нет, потому что 1) в клиентском коде не будет тайпчекинга/кастинга 2) нельзя будет накодить так, чтобы результат зависел от порядка подключения делегатов
1. Так не лучше ли в клиентском коде проверить тип объекта и, если он не подходит, не обработать его? 2. А вот порядок да, проблема. Есть в AdapterDelegates возможность работы с Adapter#getViewType, насколько это поможет - не знаю. Скорее всего - не поможет.
Вадим
есть 3 TextView шириной 100dp, текст в них должен быть по центу если меньше 100dp или начинаться слева если больше 100dp. Проблема в том, что на устройстве(7.0) текст больше 100dp центруется и обрезается вначале. На эмуляторе(6.0) все ок. android:layout_width="100dp" android:layout_height="wrap_content" android:ellipsize="end" android:gravity="center" android:textAlignment="center" android:maxLines="1"
Aleksey
Там есть FallbackDelegate. А вообще - такую гарантию может дать только разработчик, который позаботиться о том, чтобы все типы приходящих элементов обработались.
Вадим
Mike
Там есть FallbackDelegate. А вообще - такую гарантию может дать только разработчик, который позаботиться о том, чтобы все типы приходящих элементов обработались.
Фоллбэки (или дефолтные значения) приносят больше пользы, чем вреда, только в очень редких и ограниченных случаях.
Mike
Там есть FallbackDelegate. А вообще - такую гарантию может дать только разработчик, который позаботиться о том, чтобы все типы приходящих элементов обработались.
Разработчик может позаботиться, например, о том, чтобы его решение более гладко ложилось на систему типов языка.
Sergey
Подтверждаю. Она, наверное, в "Остальные страны" входит.
Kota
Столкнулся с такой проблемой: мне нужно вытащить json из ответа от сервера, гугл подсказал что можно это сделать с помощью response.body().string(), но этот подход не работает как надо и возвращает только одну первую строчку от json'а, в чем проблема?
Kota
Скорее всего, там всего одна строка.
Отнюдь, в чаке показывается нормальный ответ
Konstantin
как лучше сделать длинный "лендинг" - как scrollView + LinearLayout (или констрейнт), или как recycler с разными типами? например если там 5-6 разных блоков ожидается, некоторые слайдеры, некоторые сеткой етц
Mike
Отнюдь, в чаке показывается нормальный ответ
Не знаю, что такое чак, но думаю, что он отформатировал JSON, чтоб было красиво.
Konstantin
страшно, кроме собственно разных типов вьюшек - там тоже ведь понадобится стейт какой-никакой запоминать (типа микрослайдер на 3 слайде остановлен, не сбрасывать же его при скролле)
Konstantin
дохлый смарт это сколько чего там
Konstantin
на эмуле же можно попробовать выставить память и процессор
𝔇𝔢𝔫𝔦𝔰
Господа, подскажите, раньше в разделе Widgets был спиннер. Аналог комбобокса. А вот сейчас нужен он как раз, кинулся, а его нет. Возможно туплю, но что теперь вместо него использовать?
Alexey
дохлый смарт это сколько чего там
512 озу и большое разрешение экрана выбери
𝔇𝔢𝔫𝔦𝔰
Spinner никто не удалял
А где же он тогда?
Mike
А где же он тогда?
Вот: android.widget.Spinner. А на этой палитре вообще ничего нет.
Сергій
Dug
Сейчас бы в ui конструкторе интерфейс делать
𝔇𝔢𝔫𝔦𝔰
Mike
мб в Legacy лежит, вместе с остальными нехайповыми вещами
𝔇𝔢𝔫𝔦𝔰
нету, почему вот и спрашиваю, куда он делся
𝔇𝔢𝔫𝔦𝔰
Mike
нету, почему вот и спрашиваю, куда он делся
он на месте, жив и здоров, просто на палитре нифига нет
𝔇𝔢𝔫𝔦𝔰
Добавил через xml врукопашную, но какая-то фигня получается
𝔇𝔢𝔫𝔦𝔰
непонятно, почему в палитре нет его
𝔇𝔢𝔫𝔦𝔰
ну а чем тогда замето него
𝔇𝔢𝔫𝔦𝔰
нужен комбобокс
𝔇𝔢𝔫𝔦𝔰
Добавил через xml врукопашную, но какая-то фигня получается
А мне в ответ This view is not constrained vertically: at runtime it will jump to the top unless you add a vertical constraint The layout editor allows you to place widgets anywhere on the canvas, and it records the current position with designtime attributes (such as layout_editor_absoluteX). These attributes are not applied at runtime, so if you push your layout on a device, the widgets may appear in a different location than shown in the editor. To fix this, make sure a widget has both horizontal and vertical constraints by dragging from the edge connections.
боже
а ты скопировал сразу и скинул или почитал?
Ferrero
Коллеги, никто не реализовывал случайно collapsing recycler view?
𝔇𝔢𝔫𝔦𝔰
да :)
Kanstantsin
ну а чем тогда замето него
зачем его чем-то менять ?
Kanstantsin
говорят не пользоваться палитрой, а не Spinner-ом
𝔇𝔢𝔫𝔦𝔰
зачем его чем-то менять ?
ну вот как пишут выше: ибо нехуй ею пользоваться
𝔇𝔢𝔫𝔦𝔰
аааа
𝔇𝔢𝔫𝔦𝔰
ну все равно вопрос открыт для меня, почему его снесли с палитры.
Igor
Господа, у кого есть идеи как можно дернуть из кода: app:layout_constraintVertical_weight
𝔇𝔢𝔫𝔦𝔰
прошу прошения снова за дебильный вопрос, но почему на кнопках текс приводится к верхнему регистру? Как сделать что бы не приводил?
Igor
как и все layout_ — посредством LayoutParams
var a = Calendar.layoutParams До этого я додумался, а вот дальше то что с этим делать?)
𝔇𝔢𝔫𝔦𝔰
это по гайдлайнам MD
ничего не понял
Сергій
ничего не понял
отключить android:textAllCaps="false"