-1

如图所示,我正在连接两个 recyclerView。

图片

其中之一是带有标题的分段 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只要能得到可见的孩子!这意味着更改颜色适用于可见的孩子。

**onClickscrollToPosition互相干扰。

4

1 回答 1

0

foodRVLayoutManager.scrollToPosition(index); 最后我只是通过更改来 解决了这个问题 foodRVLayoutManager.scrollToPositionWithOffset(index, 3);

通过设置offset,不可见的项目在高亮之前变得可见。

于 2017-12-17T09:18:28.763 回答