package com.marshalchen.ultimaterecyclerview.demo.dragdemo; import android.graphics.Point; import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; import com.marshalchen.ultimaterecyclerview.URLogs; import com.marshalchen.ultimaterecyclerview.demo.R; import com.marshalchen.ultimaterecyclerview.dragsortadapter.DragSortAdapter; import com.marshalchen.ultimaterecyclerview.dragsortadapter.NoForegroundShadowBuilder; import java.util.List; public class DragAdatper extends DragSortAdapter<DragAdatper.MainViewHolder> { private List<Integer> stringList; public DragAdatper(RecyclerView recyclerView, List<Integer> data) { super(recyclerView); this.stringList = data; } @Override public MainViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { LayoutInflater inflater = LayoutInflater.from(parent.getContext()); View view = inflater.inflate(R.layout.rv_item_linear, parent, false); MainViewHolder holder = new MainViewHolder(this, view); view.setOnClickListener(holder); view.setOnLongClickListener(holder); return holder; } @Override public void onBindViewHolder(final MainViewHolder holder, final int position) { Integer itemId = stringList.get(position); holder.textViewSample.setText(itemId + " "); // NOTE: check for getDraggingId() match to set an "invisible space" while dragging // holder.container.setVisibility(getDraggingId() == itemId ? View.INVISIBLE : View.VISIBLE); // holder.container.postInvalidate(); } @Override public long getItemId(int position) { // URLogs.d("hashcode---"+stringList.get(position).hashCode()+" "+position); return stringList.get(position).hashCode(); } protected static int convertToOriginalPosition(int position, int dragInitial, int dragCurrent) { if (dragInitial < 0 || dragCurrent < 0) { // not dragging return position; } else { if ((dragInitial == dragCurrent) || ((position < dragInitial) && (position < dragCurrent)) || (position > dragInitial) && (position > dragCurrent)) { return position; } else if (dragCurrent < dragInitial) { if (position == dragCurrent) { return dragInitial; } else { return position - 1; } } else { // if (dragCurrent > dragInitial) if (position == dragCurrent) { return dragInitial; } else { return position + 1; } } } } @Override public int getItemCount() { return stringList.size(); } @Override public int getPositionForId(long id) { return stringList.indexOf((int) id); } @Override public boolean move(int fromPosition, int toPosition) { stringList.add(toPosition, stringList.remove(fromPosition)); return true; } static class MainViewHolder extends DragSortAdapter.ViewHolder implements View.OnClickListener, View.OnLongClickListener { TextView textViewSample; ImageView imageViewSample; ProgressBar progressBarSample; public MainViewHolder(DragSortAdapter adapter, View itemView) { super(adapter, itemView); textViewSample = (TextView) itemView.findViewById( R.id.textview); imageViewSample = (ImageView) itemView.findViewById(R.id.imageview); progressBarSample = (ProgressBar) itemView.findViewById(R.id.progressbar); progressBarSample.setVisibility(View.GONE); } @Override public void onClick(@NonNull View v) { URLogs.d(textViewSample.getText() + " clicked!"); } @Override public boolean onLongClick(@NonNull View v) { startDrag(); return true; } @Override public View.DragShadowBuilder getShadowBuilder(View itemView, Point touchPoint) { return new NoForegroundShadowBuilder(itemView, touchPoint); } } }