Codejie's C++ Space

Using C++

EL : getPrev() and getNext()


    早上一朋友问, EL如果支持删除某个课程, 还怎么能支持getPrev()和getNext()? 我很奇怪, 为啥不能呢? 他说, 因为EL的课程号是不连续的, 那么应该是靠连续的记录ID继续上下索引的, 那么当删除某个记录时, 导致ID不连续, 也就不能正常Navigate了, 是不? 除非删除后, 一个一个'搬', 以包装连续. 听他说完, 忽然感到轻松 -- 原来'笨蛋'不止我一个啊...
    在实现EL对记录的getPrev()和getNext()时, 我也为EL的记录表中没有一个连续的记录ID而郁闷 -- 没有个连续ID, 而课程号本身又不连续, 咋不呢? 那时都还没考虑删除的问题呢. 郁闷地去睡觉, 半夜惊醒才想起, 没有连续记录ID就是设计是觉得这个ID跟课程号在一起太冗余才去掉的, 而getPrev()/getNext(), 完全靠课程号就能搞定的啊, 代码敲的都忘记自己的初衷了, SQL语句也白学了...

    于是我把下面ELContentProvider的片段发给他, 并加了句 -- '你咋跟我一样笨呢...'

    @Override
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
        int res = matcher.match(uri);
        String table = null;
        switch (res) {
        
        
        
        case MATCH_ITEM_EL_ESL_RANDOM:
            db = elDBAccess.getReadableDatabase();
            table = "esl";
            sortOrder = "random() limit 1";
            break;
            
        case MATCH_ITEM_EL_ESL_NEXT:
        case MATCH_ITEM_EL_ESL_PREV:
        case MATCH_ITEM_EL_ESL_FIRST:
        case MATCH_ITEM_EL_ESL_LAST:            
            if (res == MATCH_ITEM_EL_ESL_NEXT) {
                selection = "idx>" + ContentUris.parseId(uri);
                sortOrder = "idx asc";
            } else if (res == MATCH_ITEM_EL_ESL_PREV) {
                selection = "idx<" + ContentUris.parseId(uri);
                sortOrder = "idx desc";                
            } else if (res == MATCH_ITEM_EL_ESL_FIRST) {
                selection = null;
                sortOrder = "idx asc";
            } else {
                selection = null;
                sortOrder = "idx desc";
            }
            
            db = elDBAccess.getReadableDatabase();
            
            return db.query("esl", projection, selection, nullnullnull, sortOrder, "1");            

        
        }
        
        
    }
    
   记录在此, 提醒自己保持清醒...

posted on 2013-08-20 23:35 codejie 阅读(1235) 评论(0)  编辑 收藏 引用 所属分类: 随笔而已G7EL


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


公告

Using C++

导航

统计

留言簿(73)

随笔分类(513)

积分与排名

最新评论

阅读排行榜

评论排行榜