2012-11-04 82 views
2

我處於這種情況,我可能需要操縱兩個單獨的Cursor對象。我希望通過結合兩個單獨的光標來創建我們自己的光標。但我不確定它是否被允許。閱讀你不能的地方,但我想提出一個具體的問題,所以至少給予有類似情況的其他人一些注意。是否可以擴展或實現一個遊標?

回答

1

我希望有某種方式通過結合兩個獨立的人

你試過MergeCursor創建自己的光標?引用the documentation

一個可以讓您將一個遊標數組作爲單個線性遊標顯示的便利類。所提供的遊標模式完全取決於MergeCursor的創建者,如果需要的話可能會有所不同。調用getColumns,getColumnIndex等將返回MergeCursor當前指向的行的值。

另外,如果你的目標是在某種形式的AdapterView同時顯示Cursors,你可以使用my MergeAdapter,並在Adapter級串連東西

+0

嗚,不,我沒有嘗試,因爲我不知道它的存在。我試圖尋找一些東西,但沒有多少討論。感謝你,這就是我正在尋找的!我打算用'CursorWrapper'創建自己的,但是這樣做效果更好:)謝謝! – Andy

+0

只是爲了澄清,我在看doc,但它並沒有解釋getCount是否會得到所有遊標的數量,持有遊標的數組等等。我假設它是所有遊標的總長度遊標添加了嗎?我是否還假定它也會按順序遍歷遊標數組中的每個索引,按順序遍歷每個單獨的遊標,而不需要我做任何額外的工作?只是想確定,因爲我從來沒有使用它。我很感激幫助。 – Andy

+0

@Andy:「我認爲它是整體長度......」 - 是的,從源代碼中可以看到:https://android.googlesource.com/platform/frameworks/base/+/refs /heads/master/core/java/android/database/MergeCursor.java「我是否認爲它也會通過遊標中的每個索引...」 - 如果通過「索引」表示「位置」,則是的(再次使用源代碼)。 – CommonsWare

1

即使你找到了適合自己的具體使用情況下的解決方案,我仍然想回答你的主要問題。

是的,它可以實現你自己的遊標。

Cursor是一個公共接口,可以由大家實現。

但是,它有大量的方法需要實施。

使用AbstractCursorAbstractWindowedCursor作爲基類可以幫助減少開銷。

可用的具體實現也可以擴展。

CrossProcessCursor, CrossProcessCursorWrapper, CursorWrapper, MatrixCursor, MergeCursor, MockCursor, SQLiteCursor

+0

謝謝。我也注意到了'AbstractCursor'。但是,如何使用您的方法將兩個遊標內的值合併爲一個遊標?我正在查看AbstractCursor,但我看不到元素的位置。我看到它使用的所有方法,但沒有包含這些元素的任何方法。 – Andy