0

私のアプリでは、起動時に検索フィルターオプション付きのすべての連絡先を表示したいと思います。私はこれを達成しましたが、問題は-連絡先をロードしている間、より多くの時間がかかることです。コードの効率を改善するにはどうすればよいですか?以下のコードスニペットは、連絡先を取得する方法を示しています。

public ContactList newContactList(Context ctx) {

ContactList contacts = new ContactList();

String id = "";

String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";

try {

    this.cur = this.cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, sortOrder);       
    if (this.cur.getCount() > 0) {
        while (cur.moveToNext()) {
            Contact c = new Contact();
            id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
                if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
                c.setId(id);
                c.setDisplayName(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));
                c.setPhone(this.getPhoneNumbers(ctx, id));
                c.setEmail(this.getEmailAddresses(id));
                c.setNotes(this.getContactNotes(id));
                c.setAddresses(this.getContactAddresses(id));
                c.setImAddresses(this.getIM(id));
                c.setOrganization(this.getContactOrg(id));
                //c.setPicture(loadContactPhoto(cr, cur.getLong(cur.getColumnIndex(CommonDataKinds.Photo.CONTACT_ID))));
                contacts.addContact(c);
            }               
        }
    }
    }
    catch(Exception e)
    {
        throw new IllegalStateException(e);
    }
    finally
    {
        cur.close();            
    }

    return(contacts);
}

ContactListは、すべての連絡先のArrayListを返すクラスであり、このarraylistを使用して、カスタムアダプタクラスに設定しています。カーソルを繰り返してarraylistをフェッチするので、かなり時間がかかると思います。ただし、検索条件に基づいて連絡先をフィルタリングし、カスタム連絡先リストを表示するには、この配列リストが必要になります。コードのパフォーマンスを向上させる方法はありますか?

4

1 に答える 1

1

CursorAdapterを使ってみませんか? http://developer.android.com/reference/android/widget/CursorAdapter.html

于 2012-04-26T11:24:51.677 に答える