0

私のアプリでは、起動時にすべての連絡先を検索フィルタオプションで表示したいと考えています。私はこれを達成しましたが、問題は - 連絡先を読み込んでいる間に時間がかかります。コードの効率をどのように向上させることができますか?コードスニペットの下には、私は連絡先をretreivingています方法を示しています。連絡先を表示するためのカスタムリストビューの読み込みに時間がかかります

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を使用してカスタムアダプタクラスに設定しています。私は、カーソルを介してitereatingによってarraylistを取得するために多くの時間がかかると思う。しかし、検索基準に基づいて連絡先をフィルタリングし、カスタム連絡先リストを表示するには、このarraylistが必要です。コードのパフォーマンスを向上させる方法はありますか?

答えて

1

なぜCursorAdapterを使用しないのですか? http://developer.android.com/reference/android/widget/CursorAdapter.html

+0

ご連絡ありがとうございました。私は 'SimpleCursorAdapter'を使って連絡先を表示しようとしましたが、すぐに連絡先を読み込んでいます。しかし、連絡先リストのどの項目でも、どのようにonClickメソッドを実装することができますか?以下は、私がListActivityで連絡先を表示するために使用したコードです。あなたのリストビューで –

+0

、ちょうどsetOnItemClickListenerを追加し 'mListView.setOnItemClickListener(新OnItemClickListener(){ \t \t \t \t @Override \t \t \t \tます。public void onItemClick(AdapterView arg0は、表示ARG1、int型のARG2、 \t \t \t \t \t \t長いARG3){ \t \t \t \t \t \t \t \t \t} \t \t \t}); 'とonItemClick方法では、' mListView.getAdapter()のgetItem(ARG2)のような項目を取得するためのあなたのcurstomのadatperで遊ぶ;。あなたの助けのための ' –

+0

感謝アレクサンドラを。私はそれが働いた。どうもありがとう –

関連する問題