Как получить дочерние элементы менеджера компоновки, которые еще не видны в адаптере утилита просмотра?
Я соединяю два recyclerView, как вы видите на картинке.
один из них представляет собой секцию recyclerView с заголовком. (нижний)
другой - это просмотрщик, который показывает заголовки нижнего в виде вкладки. (верхний)
Я динамически получаю набор данных для них с Retrofit
и устанавливая их отдельно
Я хочу выделить первые элементы, прокрутив нижние. Прокрутка успешно завершена, и когда нижняя часть recyclerView прокручивается и попадает в положение заголовка, верхняя часть recyclerView переходит в эту конкретную позицию. Теперь, когда я прокрутил до этой позиции, я также хочу это подчеркнуть.
Я использую XML-файл для изменения цвета элемента при выборе:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/chooseCAndZ" android:state_selected="true"/>
<item android:drawable="@color/colorAccent" android:state_focused="true"/>
</selector>
и сделайте следующую работу по изменению цвета верхнего recyclerView при нажатии, и он отлично работает:
@Override
public void onBindViewHolder(final FoodTopMenuAdapter.ViewHolder holder, int position) {
holder.mView.setSelected(selectedPos == holder.getAdapterPosition());
holder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Integer index = inList.get(holder.getAdapterPosition());
linearLayoutManager.scrollToPosition(index);
if (holder.getAdapterPosition() == RecyclerView.NO_POSITION) return;
notifyItemChanged(selectedPos );
selectedPos = holder.getAdapterPosition();
notifyItemChanged(selectedPos );
}
});
}
также сделайте эту работу для прокрутки до определенной позиции в нижней части recyclerView onBindViewHolder
:
index = inList.get(vheader.getHeaderCategory());
foodRVLayoutManager.scrollToPosition(index);
Теперь идея состоит в том, чтобы получить конкретное представление от foodRVLayoutManager.getChildAt(i).setSelected(true);
изменить цвет вида как selected
,
но основные проблемы таковы:
**
foodRVLayoutManager
просто можно заполучить детей, которые видны! это означает, что изменение цвета работает для видимых детей.**
onClick
а такжеscrollToPosition
вмешиваться друг в друга.
1 ответ
Наконец, я решил проблему, просто изменив foodRVLayoutManager.scrollToPosition(index);
в foodRVLayoutManager.scrollToPositionWithOffset(index, 3);
при установке смещения невидимые элементы становятся видимыми до выделения.