2016-07-01 18 views
0

Ich habe eine Liste erstellt RecyclerView verwendet, die eine Drag-and-Drop hat feature.List ist als untenRecyclerView Drag & Drop-Position nicht funktioniert android

gegeben

Liste

Liste Artikel 1

Liste Punkt 2

Liste Artikel 3

Wenn der Benutzer Listenelement 3 in die Position der Liste Punkt 1, die Liste wird aktualisiert, wenn das ite ziehen m 3 ist in der Nähe zur Liste Punkt 2. Daraus ergibt sich die Liste aktualisiert wird, wie unten

Liste

Liste Artikel 1

Liste Artikel 3

Liste Artikel 2

Die Adapterklasse für Das obige Szenario:

public class VehicleAdapter extends RecyclerView.Adapter<ViewHolder> implements ItemTouchHelperAdapter { 

    private VehicleInfoBean mVehicleInfoBean; 
    private Context ctx; 
    private HashMap<Integer, Boolean> expandedMap; 
    private int indexOfSwipe; 
    private LayoutInflater inflater; 
    private final int row1 = 0, rowrest = 1; 
    private RecyclerView recyclerView; 
    private ItemTouchHelper mItemTouchHelper; 

    public VehicleAdapter(VehicleInfoBean vehicleInfoObj, Context ctx, RecyclerView recyclerView) { 
     this.bean = vehicleInfoObj; 
     this.ctx = ctx; 
     inflater = LayoutInflater.from(ctx); 
     ItemTouchHelper.Callback callback = new SimpleItemTouchHelperCallback(this); 
     mItemTouchHelper = new ItemTouchHelper(callback); 
     this.recyclerView = recyclerView; 
     mItemTouchHelper.attachToRecyclerView(recyclerView); 

    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View v; 
     ViewHolder viewHolder; 

       v = inflater.inflate(R.layout.card_odometer, parent, false); 
       viewHolder = new OdometerViewHolder(v); 

     return viewHolder; 
    } 


    @Override 
    public void onBindViewHolder(final ViewHolder holder, final int position) { 

     FCALog.d("adapter -- onBindViewHolder ---- " + position); 

     VehicleInfoViewHolder vehicleInfoViewHolder = (VehicleInfoViewHolder) holder; 
     vehicleInfoViewHolder.getIvDragItem().setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       if (MotionEventCompat.getActionMasked(event) == MotionEvent.ACTION_DOWN) { 

        mItemTouchHelper.startDrag(holder); 
       } 
       return false; 
      } 
     }); 


    } 

    @Override 
    public int getItemCount() { 
     return bean.getInfoBeanHashMap().size(); 

    } 

    @Override 
    public int getItemViewType(int position) { 

     return position; 
    } 

    @Override 
    public void onItemMove(int fromPosition, int toPosition) { 
     Collections.swap(bean.getSequence(), fromPosition, toPosition); 
     notifyItemMoved(fromPosition, toPosition); 
    } 

    @Override 
    public void onItemDismiss(int position) { 

    } 


} 

Lassen Sie mich wissen, wenn Sie ähnlich konfrontiert Ausgabe mit Drag & Drop-Position in RecyclerView.

+0

habe die Lösung für das obige Sol. Die getItemViewType() gab keine Viewtyp-Instanz zurück. – sharry

Antwort

0

Ich habe ein gleiches Problem bei der Implementierung Drag-and-Drop in GridView ich Android-advancedRecyclerView-Bibliothek verwendet, ich habe auch Frage über StackOverflow here gestellt und ich Frage auch Autor der Bibliothek, und sie haben diese Funktion implementiert , Siehe meine Frage.

Obwohl ich ziemlich nützliche Blog here gefunden habe, gibt es keine Notwendigkeit, eine externe Bibliothek zu verwenden, die Sie RecyclerViews innere Funktionalität verwenden können, vielleicht ist es hilfreich für Sie.

Verwandte Themen