主要思路是:override move系列的方法,让cursor以自己想要的顺序来移动,从而达到对cursor排序的目的。比如数组A0里有 4(0),3(1),1(2),2(3),括号内为位置,排序后用数据记录A1:1(2),2(3),3(1),4(0)。要访问第一个元素,则访问 A1[0]得到1(2),根据(2)找到在A0中的实际位置2,即1(2)。参考了下系统的CursorWrapper和AbstractCursor代 码实现,另外有时间可以顺带了解下MatrixCursor。

package com.xx.test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import android.database.Cursor;
import android.database.CursorWrapper;
import com.xx.test.SortCursor.SortEntry;
public class SortCursor extends CursorWrapper implements Comparator<SortEntry>{ public SortCursor(Cursor cursor) {
super(cursor);
} Cursor mCursor;
ArrayList<SortEntry> sortList = new ArrayList<SortEntry>();
int mPos = 0;
public static class SortEntry {
public String key;
public int order;
} public int compare(SortEntry entry1, SortEntry entry2) {
return entry1.key.compareTo(entry2.key);
} public SortCursor(Cursor cursor, String columnName) {
super(cursor); mCursor = cursor;
if (mCursor != null && mCursor.getCount() > 0) {
int i = 0;
int column = cursor.getColumnIndexOrThrow(columnName);
for (mCursor.moveToFirst(); !mCursor.isAfterLast(); mCursor.moveToNext(), i++) {
SortEntry sortKey = new SortEntry();
sortKey.key = cursor.getString(column);
sortKey.order = i;
sortList.add(sortKey);
}
}
Collections.sort(sortList, this);
}
public boolean moveToPosition(int position) {
if (position >= 0 && position < sortList.size()) {
mPos = position;
int order = sortList.get(position).order;
return mCursor.moveToPosition(order);
}
if (position < 0) {
mPos = -1;
}
if (position >= sortList.size()) {
mPos = sortList.size();
}
return mCursor.moveToPosition(position);
}
public boolean moveToFirst() {
return moveToPosition(0);
}
public boolean moveToLast() {
return moveToPosition(getCount() - 1);
}
public boolean moveToNext() {
return moveToPosition(mPos + 1);
}
public boolean moveToPrevious() {
return moveToPosition(mPos - 1);
}
public boolean move(int offset) {
return moveToPosition(mPos + offset);
}
public int getPosition() {
return mPos;
}
}
 

Android 利用cursor来进行排序(转至http://blog.csdn.net/yangzongquan/article/details/6547860)的更多相关文章

  1. Android 设计模式之观察者模式(转载自:“http://blog.csdn.net/fangchongbory/article/details/7774044”)

    /* * 观察者模式 *      定义对象间的一种一个(Subject)对多(Observer)的依赖关系,当一个对象的状态发送改变时,所以依赖于它的 * 对象都得到通知并被自动更新 * * 当然, ...

  2. 快速掌握 Android Studio 中 Gradle 的使用方法 [转http://blog.csdn.net/feelang/article/details/41783317]

    Gradle是可以用于Android开发的新一代的 Build System, 也是 Android Studio默认的build工具. Gradle脚本是基于一种JVM语言 -- Groovy,再加 ...

  3. [Android Pro] https://blog.csdn.net/gaugamela/article/details/79143309

    原文地址:https://blog.csdn.net/gaugamela/article/details/79143309 最近遇到这样一个问题: 第三方的SDK除了Jar包外,还提供了对应的so文件 ...

  4. android gradle,groovy--https://blog.csdn.net/hebbely/article/details/79074460

    android grale,groovyhttps://blog.csdn.net/hebbely/article/details/79074460 Gradle编译时报错:gradle:peer n ...

  5. 排序算法 ----(转载::http://blog.csdn.net/hguisu/article/details/7776068)

    1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表.即:先将序列的第1个记录看成是一个有序 ...

  6. Android 学习路线图(转载自https://blog.csdn.net/lixuce1234/article/details/77947405)

    程序设计 一.java (a)基本语法(如继承.异常.引用.泛型等) Java核心技术 卷I(适合入门) 进阶 Effective Java中文版(如何写好的Java代码) Java解惑 (介绍烂Ja ...

  7. Android APK反编译详解(附图) (转至 http://blog.csdn.net/ithomer/article/details/6727581)

    本文Android反编译教程,测试环境: Win7 Ultimate x64 Ubuntu 12.04 x86_x64 反编译工具包 下载 (2012-10-10更新) 一.Apk反编译得到Java源 ...

  8. 几种排序算法的比较转自http://blog.csdn.net/keenweiwei/article/details/3697452

    1冒泡排序: 已知一组无需数据a[1],a[2],a[3],a[4],a[5][a[n],将其按升序排列,首先找出这组数据中最大值,将a[1]与a[2]比较,若a[1]大,则交换两者的值,否则不变,在 ...

  9. android 蓝牙 http://blog.csdn.net/u012843100/article/details/52384219

    http://blog.csdn.net/u012843100/article/details/52384219

随机推荐

  1. jpa多条件查询重写Specification的toPredicate方法(转)

    Spring Data JPA支持JPA2.0的Criteria查询,相应的接口是JpaSpecificationExecutor.Criteria 查询:是一种类型安全和更面向对象的查询 . 这个接 ...

  2. Spring Cloud 通过代码自定义配置Ribbon

    我们还是先从官网文档开始学习,如下图所示,我们可以搞一个测试配置类,来验证是否真的可以通过代码来自定义配置Ribbon,但文档明确给出了警告:即这个测试配置类不能放在@ComponentScan所扫描 ...

  3. 【转】js frame 框架编程

    源地址:http://www.blogjava.net/lusm/archive/2008/02/11/179620.html 1 框架编程概述 一个Html 页面可以有一个或多个子框架,这些子框架以 ...

  4. [hihoCoder] #1089 : 最短路径·二:Floyd算法

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 万圣节的中午,小Hi和小Ho在吃过中饭之后,来到了一个新的鬼屋! 鬼屋中一共有N个地点,分别编号为1..N,这N个地点之间 ...

  5. python __slots__使用详解

    1.动态添加属性 class Lang(object): def __init__(self,name,score): self.name=name self.score=score def lang ...

  6. Linux命令(24) :sort

    转载地址:点击 linux 命令详解 sort是在Linux里非常常用的一个命令,管排序的,集中精力,五分钟搞定sort,现在开始! 1 sort的工作原理 sort将文件的每一行作为一个单位,相互比 ...

  7. How-to: Tune Your Apache Spark Jobs (Part 1)

    Learn techniques for tuning your Apache Spark jobs for optimal efficiency. When you write Apache Spa ...

  8. C++编程思想

    写在前面的话:自己看书的时候不是太习惯边看边做上面的例子,因为感觉那样子看书太慢了,但是这样子又会因为看的太快,之后什么都记不住,所以就想写写读书笔记 第六章

  9. uml 符号关系示意

    类(Class) 类(图A)是对象的蓝图,其中包含3个组成部分.第一个是Java中定义的类名.第二个是属性(attributes).第三个是该类提供的方法.属性和操作之前可附加一个可见性修饰符.加号( ...

  10. tomcat 的线程池配置,字符编码设置

    优化tomcat配置  ,修改原先的配置 conf/server.xml 配置 <Executor name="tomcatThreadPool" namePrefix=&q ...