#StackBounty: #java #android #drag-and-drop #recyclerview Why do the list elements not swap?

Bounty: 50

I have a RecyclerView and have implemented an onMove command called onItemMove. I’m using onItemMove to try and get the list elements to swap position when dragged around, but the list elements just hover over each, they don’t swap. How can I correct this?

Note 1: onItemDismiss works fine; it swipes the item away and removes it from the list.

Note 2: I’ve tried to Override onItemMove, but it doesn’t actually override its superclass.

List Adaptor Class: This contains the onItemMove command

public class ListAdapter extends RecyclerView.Adapter<ListAdapter.ListViewHolder> {
    private static final String TAG = "ListAdapter";
    Context context;
    private List<UserData> dataList = new ArrayList<>();
    LayoutInflater inflater;
    Listener listener;
    DbHelper dbHelper;

    public interface Listener {
        void nameToChnge(String name);

    public ListAdapter(Context context, List<UserData> dataList1) {
        this.context = context;
        this.dataList = dataList1;
        this.listener= (Listener) context;
        inflater = LayoutInflater.from(context);

    public ListViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View convertView = inflater.inflate(R.layout.recylerview_one, parent, false);
        ListViewHolder viewHolder = new ListViewHolder(convertView);
        return viewHolder;

    public void onBindViewHolder(ListViewHolder holder, final int position) {
        holder.tv_description.setText(dataList.get(position).description + "");

        holder.relLayout.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v) {
                String s = dataList.get(position).id;
                Integer stringo = Integer.parseInt(s);
                Intent intent = new Intent(context, ItemEditActivity.class);
                intent.putExtra("ItemNumber", stringo);

    public int getItemCount() {
        return dataList.size();

    class ListViewHolder extends RecyclerView.ViewHolder {
        TextView tv_name, tv_quantity, tv_description;
        RelativeLayout relLayout;

        public ListViewHolder(View itemView) {
            tv_name = (TextView) itemView.findViewById(R.id.nameDisplay);
            tv_quantity = (TextView) itemView.findViewById(R.id.quantityDisplay);
            tv_description = (TextView) itemView.findViewById(R.id.descriptionDisplay);
            relLayout = (RelativeLayout) itemView.findViewById(R.id.relLayout);

    public void onItemDismiss(final int position) {


    public void onItemMove(int fromPosition, int toPosition) {
        Collections.swap(dataList, fromPosition, toPosition);
        notifyItemMoved(fromPosition, toPosition);


ItemTouchHelper Class:

  public class SimpleItemTouchHelperCallback extends ItemTouchHelper.Callback{
        private final ListAdapter  mAdapter;

        public SimpleItemTouchHelperCallback(ListAdapter adapter) {
            mAdapter = adapter;


    public boolean isLongPressDragEnabled() {
        return true;

    public boolean isItemViewSwipeEnabled() {
        return true;

    public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
        int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
        int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END;
        return makeMovementFlags(dragFlags, swipeFlags);

    public boolean onMove(RecyclerView recyclerView,
                          RecyclerView.ViewHolder viewHolder,
                          RecyclerView.ViewHolder target) {
        mAdapter.onItemMove(viewHolder.getAdapterPosition(), target.getAdapterPosition());

        return true;

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

Part of the Main Activity where I initialise the RecyclerView and

public class MainActivity extends AppCompatActivity implements ListAdapter.Listener {
    private static final String TAG = "MainActivity";

    RecyclerView recyclerView;
    DbHelper dbHelper;
    ListAdapter adapter;
    FloatingActionButton fab;

    protected void onCreate(Bundle savedInstanceState) {

        dbHelper = DbHelper.getInstance(getApplicationContext());

        recyclerView= (RecyclerView) findViewById(R.id.rv_contactlist);
        adapter = new ListAdapter(this, dbHelper.getAllUser());
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        ItemTouchHelper.Callback callback =
                new SimpleItemTouchHelperCallback(adapter);
        ItemTouchHelper touchHelper = new ItemTouchHelper(callback);




Get this bounty!!!

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.