データベースに対して 2 つのクエリを実行し、2 つのカーソル オブジェクトを返すコードがあります。これら 2 つのカーソルを組み合わせて、すべてのカーソルがListView
両方からデータを取得できるようにする方法はありますか?
12421 次
4 に答える
14
そのためのMergeCursorがあります(テーブルを結合する方法がない場合)。
于 2010-07-13T19:00:24.370 に答える
9
参考までに-MergeCursor()の使用例
c=Contacts.CONTENT_URIのContacts列を含むカーソル
private Cursor mergeCursorSubset(Cursor c) {
int userMobile = ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE,
workMobile = ContactsContract.CommonDataKinds.Phone.TYPE_WORK_MOBILE;
String storedNumber = ContactsContract.CommonDataKinds.Phone.NUMBER,
displayName =ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
numberType = ContactsContract.CommonDataKinds.Phone.TYPE,
contactKey = ContactsContract.CommonDataKinds.Phone.LOOKUP_KEY,
whereClausePre = contactKey+" = '",
whereClausePost = "AND ("+numberType+" = '"+userMobile+"' OR "+numberType+" = '"+workMobile+"'";
Uri lookupUri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;;
Cursor [] m = new Cursor[c.getCount()];
if (c.moveToFirst())
for (int k = 0; k<c.getCount();k++){
//Find the mobile numbers
Cursor u = this.getContentResolver().query(lookupUri,
new String[]{displayName, storedNumber, numberType}
, whereClausePre+c.getString(c.getColumnIndex(Contacts.LOOKUP_KEY))+"') "
+ whereClausePost, null, null);
int i = 0;
if (u.moveToFirst())
m[i++] = u;
} //for Each key
return new MergeCursor(m);
}
于 2011-10-15T06:34:52.710 に答える
4
cwac-mergeも使用できます。
cwac-merge: 複数のビューまたは ListAdapter を単一の ListAdapter にブレンドする ListAdapter である MergeAdapter を提供します。これは、セクションの見出し、複数のデータ ソースのブレンドなどに使用します。
于 2010-07-13T12:56:43.650 に答える
1
MatrixCursorをチェックしてください。
多分これはあなたにも役立つでしょうAndroid - データベーステーブル結合
于 2010-07-13T09:29:59.297 に答える