我将this DragListView用于我的项目。对于只有一个DragListView
的人,它工作正常,当拖动的项目到达顶部或底部时,它会自动滚动。但是当我有一个嵌套的DragListView
时会出现问题。
我在活动中有外部RecyclerView
。此RecyclerView
由自定义适配器填充。 RecyclerView
的自定义项包含DragListView
。所以布局是这样的:
<recyclerview>
<item>
<something like textview>
<DragListView>
<subitem/>
<subitem/>
<...../>
</DragListView>
</item>
<item repeated...>...</item>
</recyclerview>
对于上面的布局,我可以拖动子项目但是当它到达两端时它不会自动滚动。在找到问题之后,我发现滚动的标准就像“你不能看到最后一个或第一个项目,因为如果你这样做,你已经在列表的顶部/底部 ”。他们用来检查用户是否到达顶部或底部的方法是:
ViewHolder lastChild = findViewHolderForLayoutPosition(mAdapter.getItemCount() - 1);
ViewHolder firstChild = findViewHolderForLayoutPosition(0);
如果它为空,则表示您尚未到达DragListView
的顶部/底部。如果它不为空,则您已到达DragListView
的顶部/底部。
然而,即使最后一个项目当前不在屏幕上(尚未布局),上面的代码总是返回非空ViewHolder
,系统知道它已到达顶部/底部所以它不会滚动(当我仍然在列表的中间时,第一个和最后一个项目在屏幕外)。
我想问题是因为DragListView
已经渲染了所有项目,因此用户只需要滚动外部RecyclerView
。 (同时滚动RecyclerView
和DragListView
可能会导致用户使用不良的用户体验。)
我尝试将setLayoutManager
的{{1}} context
更改为通过适配器从Acitivity传递的DragListView
,但没有运气。
任何人都知道如何解决这个问题?感谢您宝贵的时间。
答案 0 :(得分:0)
经过很多天,我找到了解决问题的方法。现在,我根据DragListView
创建了一个包含许多ViewHolder的DragListView
,而不是嵌套viewType
,然后确定哪个项目可以拖动setDragListCallback
DragListView
}}。所以现在它不会一次渲染每个项目,因为每个视图都是一个项目。希望这有助于某人。