2

Ich benutze ItemTouchHelper und ItemTouchHelper.SimpleCallback, um dem Benutzer zu erlauben, eine vertikale Liste Recycler View neu anzuordnen.ItemTouchHelper - Der Tropfen wird nach der ersten gesprungenen Linie erzwungen

Das Drag and Drop funktioniert, aber der Tropfen wird nach der ersten gesprungenen Linie erzwungen, obwohl ich meinen Finger nicht von der gezogenen Zelle lasse.

finden Sie unter dem SimpleCallback:

private void initSwipeAndDrap() { 

    ItemTouchHelper.SimpleCallback simpleItemTouchCallback = 
      new ItemTouchHelper.SimpleCallback(
        ItemTouchHelper.UP | ItemTouchHelper.DOWN, 
        0) { 

       //========== Swipe (Not used) ============== 

       @Override 
       public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { 
       } 


       //========== Drag ============== 

       @Override 
       public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { 

        int fromPosition = viewHolder.getAdapterPosition(); 
        int toPosition = target.getAdapterPosition(); 

        Podcast podcast = rva.podcasts.remove(fromPosition); 
        rva.podcasts.add(toPosition, podcast); 
        act.dmo.updatePodcastsListPosition(); 
        act.dmo.notifyDataSetChangedPodcast(); 

        return true; 
       } 

       @Override 
       public boolean isLongPressDragEnabled() { 
        return false; 
       } 


      }; 

    itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback); 
    itemTouchHelper.attachToRecyclerView(rv); 
} 

Antwort

3

Ersetzen notifyDataSetChanged() durch notifyItemMoved() in OnMove() -Methode mein Problem behoben.

Welche unterdrückte mich, als ich dachte, dass onMove() nach dem Tropfen aufgerufen wurde. In der Tat hat es eine Auswirkung auf den Tropfen selbst.

+0

Ich stieß auf das Problem. Vielen Dank, dass Sie die Lösung veröffentlicht haben. – Malko

+0

Für diejenigen, die immer noch nicht funktioniert: [Warum stoppt meine RecyclerView mit ItemTouchHelper Drag nach nur einem Element, nach dem Überschreiben von getItemViewType()?] (Https://stackoverflow.com/questions/39996110/why-does-my-recyclerview-with -itemtouchhelper-stop-Ziehen-nach-nur-ein-Objekt? rq = 1) – nyconing