Android - 嵌套的DragListView在到达边缘时不会自动滚动

时间:2016-10-20 08:05:41

标签: android scroll android-recyclerview autoscroll

我将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。 (同时滚动RecyclerViewDragListView可能会导致用户使用不良的用户体验。)

我尝试将setLayoutManager的{​​{1}} context更改为通过适配器从Acitivity传递的DragListView,但没有运气。

任何人都知道如何解决这个问题?感谢您宝贵的时间。

1 个答案:

答案 0 :(得分:0)

经过很多天,我找到了解决问题的方法。现在,我根据DragListView创建了一个包含许多ViewHolder的DragListView,而不是嵌套viewType,然后确定哪个项目可以拖动setDragListCallback DragListView }}。所以现在它不会一次渲染每个项目,因为每个视图都是一个项目。希望这有助于某人。