如何获取 children 在 recyclerview 适配器中尚不可见的布局管理器?
How to get children of a layout manager that are not yet visible in recyclerview adapter?
如图所示,我正在连接两个 recyclerView。
其中一个是用 header 分割的 recyclerView。 (倒数一个)
另一个是 recyclerView,它将底部的 header 显示为选项卡。 (第一个)
我用Retrofit
为他们动态获取数据集并分别设置
我想通过滚动底部的项目来突出显示顶部的项目。滚动已成功完成,当底部 recyclerView 滚动并到达其 header 位置时,顶部 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
。
但主要问题是这些:
** the foodRVLayoutManager
just can get children that are visible! it means that changing the color is works for visible children.
** the onClick
and scrollToPosition
interference each other.
最后我通过更改解决了问题
foodRVLayoutManager.scrollToPosition(index);
到
foodRVLayoutManager.scrollToPositionWithOffset(index, 3);
通过设置偏移量,不可见的项目在高亮前变为可见。
如图所示,我正在连接两个 recyclerView。
其中一个是用 header 分割的 recyclerView。 (倒数一个)
另一个是 recyclerView,它将底部的 header 显示为选项卡。 (第一个)
我用Retrofit
为他们动态获取数据集并分别设置
我想通过滚动底部的项目来突出显示顶部的项目。滚动已成功完成,当底部 recyclerView 滚动并到达其 header 位置时,顶部 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
。
但主要问题是这些:
** the
foodRVLayoutManager
just can get children that are visible! it means that changing the color is works for visible children.** the
onClick
andscrollToPosition
interference each other.
最后我通过更改解决了问题
foodRVLayoutManager.scrollToPosition(index);
到
foodRVLayoutManager.scrollToPositionWithOffset(index, 3);
通过设置偏移量,不可见的项目在高亮前变为可见。