在我的项目中,我有两个游标。一个是从一个表处理所有书籍记录,另一个是连接两个包含租金记录和用户数据的表。我正在使用两个游标,因为加入所有游戏只显示出租的书籍,而不是全部。正是我已经想到的 - 如果你加入并且其中一列是空的,那么它将在结果光标中被省略。
问题在于我希望将其全部集中在一个ListView
中。目前我已经创建了自定义CursorLoader
,因为所有数据加载都是通过Loader
完成的。我的自定义加载器根据元素列表返回游标列表 - 这是唯一的区别。
在我的CursorAdapter
实现中,我想根据第二个游标的值将TextView
的文本设置为租借或免费。
很遗憾,您无法执行以下操作:secondCursor.moveTo(bookId)
因为书ID可能比secondCursor的大小大,所以它只会抛出IndexOutOfBoundsException
。
我也一直在测试CursorJoiner
:
CursorJoiner joiner = new CursorJoiner(data.get(0)/*first cursor*/,
new String[]{Tables.BOOK_ID}, data.get(1)/*second cursor*/, new String[]{Tables.RENT_COLUMN_BOOK_ID});
int i = 0;
while(joiner.hasNext()){
CursorJoiner.Result result = joiner.next();
i++;
switch(result){
case BOTH:
DebugLog.i("Both: " + i);
case LEFT:
break;
case RIGHT:
break;
default:
break;
}
}
问题在于它无法正常工作 - i值相应地更改为第一个光标。即使在切换CursorJoiner
构造函数游标后也是如此。
在短时间内我一直在考虑使用ExtednedCursor,但添加列中的值总是相同,所以没用。
我的问题是 - 你知道如何实现我的目标吗?
答案 0 :(得分:0)
我找到了问题的答案。我想我应该从这开始。我一直在使用INNER JOIN
创建新表,其中只包含两个表中的值。相反,我应该使用OUTER JOIN
加入所有记录,无论如何。