gpt4 book ai didi

android - 平滑滚动不适用于 Android RecyclerView 的初始滚动

转载 作者:行者123 更新时间:2023-11-29 15:40:43 25 4
gpt4 key购买 nike

我正在开发一款 Android 应用程序,它只能在一台运行 KitKat 的设备上运行。

我使用的 RecylerView 的平滑滚动功能在其他物理平板电脑和 genymotion 上使用,不幸的是在它需要工作的一个设备上停止工作。

它没有滚动到某个位置,而是越过目标位置并一直滚动到底部,看起来非常糟糕。

我能够追踪到 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)。

当我滚动到第 3 个时,我没有收到此错误。

此外,在我上下滚动列表一次后,错误停止发生。

编辑:我可以使用 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();
}
}

最佳答案

如果调用 recyclerView.smoothScrollToPosition(pos) 将立即在 UI 线程 上调用,如果 recyclerViewAdapter 忙于生成 View 项然后调用 smoothScrollToPosition 将被错过,因为 recyclerView 没有数据 来平滑滚动.因此,最好通过 recyclerView.post() 在后台线程中执行此操作。通过调用它,它进入 Main thread 队列并在其他未决任务完成后执行。

因此你应该做一些对我的情况有用的事情:

recyclerView.post(new Runnable() {
@Override
public void run() {
recyclerView.smoothScrollToPosition(pos);
}
});

关于android - 平滑滚动不适用于 Android RecyclerView 的初始滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41031846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com