16

データベースに対して 2 つのクエリを実行し、2 つのカーソル オブジェクトを返すコードがあります。これら 2 つのカーソルを組み合わせて、すべてのカーソルがListView両方からデータを取得できるようにする方法はありますか?

4

4 に答える 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 に答える