我希望使用LinearLayoutManager作为RecyclerView的布局管理器,并在适配器更新后将滚动位置显示在特定项目上,而不是第一个/最后一个位置。 这意味着在第一次(重新)布局时,给定位置应该在可见区域内。 它不应该在顶部放置位置0,然后滚动到目标位置。
我的适配器从itemCount=0开始,在线程中加载其数据并稍后通知其真正的计数。但是,即使计数仍为0,起始位置也必须已经设置!
截至目前,我使用了某种包含scrollToPosition的post Runnable,但这会产生副作用(从第一个位置开始,立即跳转到目标位置(0->目标位置),并且似乎无法与DiffUtil很好地配合使用(0->目标位置->0)
编辑: 为澄清:我需要替代layoutManager.setStackFromEnd(true);
的方法,类似于setStackFrom(position)
。如果在itemCount仍为0时调用ScrollToPosition,它将被忽略。如果我在通知itemCount现在> 0时调用它,它将从0开始布局,然后短暂停留在目标位置。如果我使用DiffUtil.DiffResult.dispatchUpdatesTo(adapter)。则完全失败(从0开始,然后滚动到目标位置,然后再次返回位置0)