android-下拉列表上的recycleView项目未使用sqlite正确排序 [英] android - recycleView item on drop is not getting sorted properly with sqlite

查看:57
本文介绍了android-下拉列表上的recycleView项目未使用sqlite正确排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经实现了一个回收视图.将排序项目放在回收视图中.但是排序不准确,排序无法正常进行.我试过写下面的代码

I have implemented a recycle view On drag & drop the sorting item in the recycle view. But sorting is not accurate, sorting not working properly. I tried write below code

@Overid
 private void onDrop(int from, int to) {   // this listener only calls when item Droped after drag
            List<ExerciseDetails>  temp = items;
            int tempstart = from;
            int tempend = to;

            if (from < to) {
              //  Log.d("  down to up", "yes");

                for (int i = from; i <= to - 1; i++) {
                    exercisesDAO.updateSortID(temp.get(i).getOrder(), temp.get(i+1).getExDetailsId());
                } 
                exercisesDAO.updateOrder(items.get(from).order,items.get(to).exDetailsId);
            } else { //if(from > to)
               // Log.d("up to down", "no"); 
                for (int i = from; i >= to + 1; i--) {
                    exercisesDAO.updateSortID(temp.get(i).getOrder(), temp.get(i-1).getExDetailsId());
                } 
                exercisesDAO.updateOrder(items.get(to).order,items.get(from).exDetailsId);
            } 
            Log.e("sdds","***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ");
        }


public void updateSortID(String newID,Long rowid) {
        String strSQL = "UPDATE " +  DBHelper.TABLE_EXERCISE_DETAILS +  " SET " + DBHelper.COLUMN_ORDER_ID +  "=" + newID + " WHERE " + DBHelper.COLUMN_EX_DETAILS_ID  +" = "+ rowid;
        mDatabase.execSQL(strSQL);
    }

DAO

  /*
     * Check whether the exercise data present or not in the db before executing statement
     */
    public  void updateOrder(String orderNewValue, Long rowId) {
    
        String Query = "Update " + DBHelper.TABLE_EXERCISE_DETAILS + " SET " + DBHelper.COLUMN_ORDER_ID + " = " + orderNewValue +  " Where " + DBHelper.COLUMN_EX_DETAILS_ID + " = " + rowId;
    
        mDatabase.execSQL(Query);
    }

推荐答案

我猜问题是,除了某些内容外, ExerciseDetails order 值从未更新过订单变更中的混乱.但是,我对您的代码做了一些更改以解决这些问题.

I guess the problem is that the order value of ExerciseDetails has never been updated in addition to some confusion in changing orders. However, I have changed your code a bit to fix these issues.

由于 updateOrder updateSortID 都完全执行相同的查询,因此我仅使用 updateOrder ,看来 orderNewValue 应该很长(而不是String).

As both updateOrder and updateSortID exactly execute the same query, so I use only updateOrder and it seems that orderNewValue should be long (not String).

public void updateOrder(Long orderNewValue, Long rowId) {
    String query = "Update " + DBHelper.TABLE_EXERCISE_DETAILS + " Set " + DBHelper.COLUMN_ORDER_ID + " = " + orderNewValue +  " Where " + DBHelper.COLUMN_EX_DETAILS_ID + " = " + rowId;
    mDatabase.execSQL(query);
}

onDrop 如下所示:

@Override
void onDrop(int from, int to) {
    // retain order of `to` item before changing orders:
    long orderTo = items.get(to).getOrder();

    // swap order values for `to` item and other middle items (except `from` item):
    if (from < to) {
        for (int i = to; i > from; i--) {
            ExerciseDetails item = items.get(i);
            long newOrder = items.get(i - 1).getOrder();
            item.setOrder(newOrder);
            exercisesDAO.updateOrder(newOrder, item.getExDetailsId());
        }
    } else {
        for (int i = to; i < from; i++) {
            ExerciseDetails item = items.get(i);
            long newOrder = items.get(i + 1).getOrder();
            item.setOrder(newOrder);
            exercisesDAO.updateOrder(newOrder, item.getExDetailsId());
        }
    }

    // set order for `from` item after swaping orders:
    ExerciseDetails itemFrom = items.get(from);
    itemFrom.setOrder(orderTo);
    exercisesDAO.updateOrder(orderTo, itemFrom.getExDetailsId());
}

毕竟,请注意,您永远不应在主线程中执行I/O工作.因此,请考虑根据您的应用程序结构以某种方式在另一个线程中运行 updateOrder .

After all, note that you should never do an I/O job in the main thread. So, consider to run updateOrder in another thread somehow based on your app structure.

这篇关于android-下拉列表上的recycleView项目未使用sqlite正确排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆