遇到这个寻找不同的解决方案,但只想添加这个,因为我认为答案不令人满意。
您可以轻松创建自己的游标类。为了允许需要 Cursor 的函数接受它,它必须扩展 AbstractCursor。为了克服系统不使用你的类的问题,你只需让你的类成为一个包装器。
这里有一个很好的例子。
https://android.googlesource.com/platform/packages/apps/Contacts/+/8df53636fe956713cc3c13d9051aeb1982074286/src/com/android/contacts/calllog/ExtendedCursor.java
public class ExtendedCursor extends AbstractCursor {
/** The cursor to wrap. */
private final Cursor mCursor;
/** The name of the additional column. */
private final String mColumnName;
/** The value to be assigned to the additional column. */
private final Object mValue;
/**
* Creates a new cursor which extends the given cursor by adding a column with a constant value.
*
* @param cursor the cursor to extend
* @param columnName the name of the additional column
* @param value the value to be assigned to the additional column
*/
public ExtendedCursor(Cursor cursor, String columnName, Object value) {
mCursor = cursor;
mColumnName = columnName;
mValue = value;
}
@Override
public int getCount() {
return mCursor.getCount();
}
@Override
public String[] getColumnNames() {
String[] columnNames = mCursor.getColumnNames();
int length = columnNames.length;
String[] extendedColumnNames = new String[length + 1];
System.arraycopy(columnNames, 0, extendedColumnNames, 0, length);
extendedColumnNames[length] = mColumnName;
return extendedColumnNames;
}
这就是它如何工作的总体思路。
现在到问题的实质了。为防止性能下降,请创建一个散列来保存列索引。这将用作缓存。调用 getString 时,检查列索引的哈希值。如果它不存在,则使用 getColumnIndex 获取它并缓存它。
抱歉,我目前无法添加任何代码,但我在移动设备上,所以我稍后会尝试添加一些。