我有一个recyclerview,我会在每次滚动后改变中心项目的背景。因此,我用以下代码覆盖了onScrollStateChanged方法:
@Override public void onScrollStateChanged(int state)
{
super.onScrollStateChanged(state);
if (state == SCROLL_STATE_IDLE)
{
scrollCount++;
Log.d(Constants.TAG, "onScrollStateChanged called in idle state: "+scrollCount+" times");
if (mCenterItemChangedListener != null)
{
mCenterItemChangedListener.onCenterItemChanged(findCenterViewIndex());
}
int centerViewPosition = findCenterViewPosition();
Log.d(Constants.TAG, "onScrollStateChanged: center view position" + centerViewPosition);
smoothScrollToPosition(centerViewPosition);
} else
{
for (int i = 0; i < getChildCount(); i++)
{
if (i != findCenterViewPosition())
{
getChildAt(i).findViewById(R.id.llPeriodFrontLayout).setVisibility(View.VISIBLE);
getChildAt(i).findViewById(R.id.llPeriodBackLayout).setVisibility(View.GONE);
}
}
}
}
问题是它被无限调用,因为我正在捕捉视图到中心。 RecyclerView自动滚动直到结束,最后一个元素被视为中心元素。与文档相反,文档表示仅在状态更改时才会调用,但我只滚动一次。