我正在尝试创建一个 Recyclerview ,它将首先滚动到顶部,然后将一个项目添加到Recyclerview上。
这是我到目前为止的代码:
while (!mLayoutManager.isSmoothScrolling()) {
mRecyclerView.smoothScrollToPosition(0);
}
PostList.add(0, post);
mAdapter.notifyItemInserted(0);
mAdapter.notifyItemRangeChanged(1, PostList.size());
这会滚动到顶部,但项目的添加不会动画(尽管它已添加到列表中)。
我认为这是因为加法动画与smoothScrollToPosition
动画同时发生,因此当它到达顶部时,加法动画已经完成,所以我们看不到它。
我可以使用Handler.postDelayed
给我的滚动动画一些时间来完成,但这并不可取,因为我不知道smoothScrollToPosition
动画完成的时间。
答案 0 :(得分:8)
我猜你希望在完成的时候滚动完成。这不是它的工作原理,滚动发生在动画帧中,如果你要等待它完成一个while循环,你的应用程序将冻结,因为你将阻止主线程。
相反,你可以这样做:
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
public void onScrollStateChanged(RecyclerView rv, int state) {
if (state == RecyclerView.SCROLL_STATE_IDLE) {
PostList.add(0, post);
mAdapter.notifyItemInserted(0);
rv.removeOnScrollListener(this);
}
}
});
recyclerView.smoothScrollToPosition(0);
没有测试代码,但基本思路是添加滚动侦听器,以便在平滑滚动停止时收到通知,然后添加项目。