我正在开发一款 Android 应用程序,该应用程序仅在一台运行 KitKat 的设备上运行。
我在其他物理平板电脑和 genymotion 上使用的 RecylerView 的平滑滚动功能不幸停止在它需要工作的一个设备上工作。
它不是滚动到某个位置,而是越过目标位置并一直滚动到底部,看起来非常糟糕。
我能够追踪到 RecyclerView 类中抽象 SmoothScroller 的错误。
if (getChildPosition(mTargetView) == mTargetPosition) {
onTargetFound(mTargetView, recyclerView.mState, mRecyclingAction);
mRecyclingAction.runIfNecessary(recyclerView);
stop();
} else {
Log.e(TAG, "Passed over target position while smooth scrolling.");
mTargetView = null;
}
我使用的是我在网上找到的 SnappingLinearLayoutManager,但是用 Android 中的普通 LinearLayoutManager 换掉了它,但仍然遇到同样的问题。
该列表长 7 个项目(用户一次可以看到 4 个),我滚动到第 5 个项目(位置 4)项目。
当我滚动到第三个时,我没有收到此错误。
同样在我上下滚动列表一次后,错误停止发生。
编辑: 我可以使用 layoutManager.scrollToPositionWithOffset(); 但我试图用平滑的滚动动画来做到这一点。
这是我的一些代码和详细信息:
private void setupMainRecyclerViewWithAdapter() {
mainLayoutManager = new SnappingLinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
mainListRecyclerView.setLayoutManager(mainLayoutManager);
settingsMainListAdapter = new SettingsListAdapter(SettingsActivity.this,
settingsPresenter.getSettingsItems(),
settingsPresenter);
mainListRecyclerView.setAdapter(settingsMainListAdapter);
mainListRecyclerView.addItemDecoration(new BottomOffsetDecoration(EXTRA_VERTICAL_SCROLLING_SPACE));
}
@Override
public void scrollMainList(boolean listAtTop) {
if(listAtTop) {
mainListRecyclerView.smoothScrollToPosition(4);
moveMainMoreButtonAboveList();
} else {
mainListRecyclerView.smoothScrollToPosition(0);
moveMainMoreButtonBelowList();
}
}