2016-10-20 2 views
0

J'utilise this DragListView pour mon projet. Pour celui avec un seul DragListView cela fonctionne bien, il a défilé automatiquement lorsque l'élément traîné a atteint le haut ou le bas. Mais le problème se produit lorsque j'ai un DragListView imbriqué.Android - DragListView imbriqué ne sera pas autoscroll lorsque atteint le bord

J'ai l'extérieur RecyclerView dans l'activité. Ce RecyclerView est rempli par un adaptateur personnalisé. Et l'article personnalisé de ce RecyclerView contient un DragListView. Ainsi, la mise en page est comme ceci:

<recyclerview> 
    <item> 
     <something like textview> 
     <DragListView> 
      <subitem/> 
      <subitem/> 
      <...../> 
     </DragListView> 
    </item> 

    <item repeated...>...</item> 
</recyclerview> 

Pour la mise en page ci-dessus, je peux faire glisser le sous-élément, mais il autoscroll coutume quand il atteint les deux extrémités. Après avoir cherché le problème, j'ai trouvé que le critère de défilement est comme "Vous ne devez pas voir le dernier ou le premier élément, parce que si vous le faites, vous êtes déjà en haut/bas de la liste". La méthode utilisée pour vérifier si user've atteint le haut ou le bas est:

ViewHolder lastChild = findViewHolderForLayoutPosition(mAdapter.getItemCount() - 1); 
    ViewHolder firstChild = findViewHolderForLayoutPosition(0); 

Si c'est nul, vous n'avez pas atteint le haut/bas de la DragListView. Si ce n'est pas nul, vous avez atteint le haut/bas du DragListView.

Cependant, même si le dernier et le premier élément ne sont pas actuellement à l'écran (pas encore installés), les codes ci-dessus retournent toujours un ViewHolder non nul le système comprend qu'il a atteint le haut/bas de sorte qu'il ne défilera pas (pendant que je suis encore au milieu de la liste, le premier et le dernier élément sont hors de l'écran).

Je suppose que le problème est que le DragListView a rendu tous les éléments de sorte que l'utilisateur devra faire défiler uniquement le RecyclerView externe. (Faire défiler à la fois RecyclerView et DragListView peut causer de mauvais UX pour les utilisateurs).

J'ai essayé de changer le setLayoutManagercontext du DragListView à getApplicationContext() qui a été passé de l'acitivité via l'adaptateur, mais pas de chance.

Est-ce que quelqu'un a une idée comment résoudre ce problème? Merci pour votre temps précieux.

Répondre

0

Après plusieurs jours, j'ai trouvé une solution de contournement pour le problème. Au lieu d'imbriquer le DragListView, maintenant je fais juste un DragListView avec de nombreux ViewHolder basé sur le viewType, puis décidé quel élément peut être déplacé mon setDragListCallback pour le DragListView. Alors maintenant, il ne rendra pas tous les éléments à la fois, car chaque vue est un élément. J'espère que cela aide quelqu'un.