如何将cursorA中的数据映射到cursorB,因为cursorA的列与cursorB不同?
例如:CursorA = {“columnA”,“columnB”} | CursorB = {“cA”,“cB”,“cZ”}
我希望CursorB充当CursorA的外观,所以当我请求时,假设来自CursorB的列cB我实际上从CursorA访问columnA。
我使用CursorWrapper管理一种方法。基本上,需要的是覆盖getColumnIndex
方法,这样,当客户端要求他想要的列idx时,你从当前光标返回一个。下面的代码显示了它:
public class CustomCursor extends CursorWrapper {
/**
* Creates a cursor wrapper.
*
* @param cursor The underlying cursor to wrap.
*/
public CustomCursor(Cursor cursor) {
super(cursor);
}
@Override
public int getColumnIndex(String columnName) {
if (SearchManager.SUGGEST_COLUMN_TEXT_1.equals(columnName)) {
return super.getColumnIndex(ContactsContract.Profile.DISPLAY_NAME_PRIMARY);
} else if (SearchManager.SUGGEST_COLUMN_TEXT_2.equals(columnName)) {
return super.getColumnIndex(ContactsContract.Profile._ID);
}
return super.getColumnIndex(columnName);
}
}
如果有更好的方法,我会很乐意尝试。
答案 0 :(得分:2)
你也可以这样查询:
"select " +
ContactsContract.Profile.DISPLAY_NAME_PRIMARY + " as " + SearchManager.SUGGEST_COLUMN_TEXT_1 ", " +
ContactsContract.Profile._ID + " as " + SearchManager.SUGGEST_COLUMN_TEXT_2 + ","
.
.
.