Как получить дочерние элементы менеджера компоновки, которые еще не видны в адаптере утилита просмотра?

Я соединяю два 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);

при установке смещения невидимые элементы становятся видимыми до выделения.