У меня очень большое приложение, в котором я использовал RecylclerViews почти везде, Я знаю, как реализовать RecyclerViews, и у меня не было никаких проблем, никогда! но в последнее время я столкнулся с очень плохой задержкой на одном из RV, (позвольте мне заверить, что мои методы привязки отлично, я загружаю все изображения в asynctasks и...), и это сначала показывает RV я получить ANR!
после нескольких часов отладки, я узнал, что каждый раз, когда набор данных изменяется (notifyDataset()), включая самый первый раз, когда заполняется RV, все представления создаются и привязаны (да, как 200 раз onCreateView (), что прямо противоположно философии RecyclerView!) Когда все представления создаются и привязаны, приложение начинает нормально функционировать, я имею в виду не больше onCreateView() и, как требуется, при вызове BindView(), без каких-либо ограничений.
Я знаю, что очень сложно найти причину, но я подумал, что, возможно, есть очевидная настройка или... которая вызывает этот или некоторый прошлый опыт от пользователей SO, может мне помочь.
ИЗМЕНИТЬ
По-видимому, причина связана с моим XML и тем, как я сделал RV для заполнения свободной области, так как когда я установил ее высоту в указанное значение (например, 400 dp), все работает нормально, но если я использую LinearLayout и layout_weight
или делать то же самое с RelativeLayout (установленным ниже элемента с выравниваемым верхним элементом и над элементом с выравниванием) воссоздает проблему.
так что я могу сказать, что эта проблема возникает, когда высота RV необходима для динамического вычисления, и я думаю, он создает все его дочерние элементы для вычисления высоты, что, очевидно, является ошибкой в библиотеке поддержки (com.android.support: recyclerview-v7: 23.4.0 в то время)
у кого есть обходной путь? или, может быть, может сказать мне свою ошибку?
Решение
для будущих googlers
Кажется, что решение должно использовать setAutoMeasureEnabled(false);
в LayoutManager.
этот метод был введен в версию библиотеки поддержки 23.2.0
и должен быть полезен для использования wrap_content в качестве параметров макета элементов RV,
каким-либо образом я преодолел свою проблему с помощью этого метода, и я использую wrap_content для моих высот элемента без проблем,