2012-02-04 17 views
0

連絡先を読み、名前と番号を取得してlistViewに入れるコードがあります。すべてが機能しますが、アプリケーションはすべての連絡先を同じ瞬間に読み込みます。私はスクロール移動でそれらを読まなければならないと思いますが、私は今、どのように助けてくださいませんか? ありがとう、Wolf。ここでlistViewの連絡先を読み込むための最適化?

は私のコードです:

のArrayList>当館=新しいArrayListを>();

 ContentResolver cr = getContentResolver(); 
     Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 


     if(cur.getCount() > 0){ 
      while(cur.moveToNext()){ 
       id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); 
       if(Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0){ 

        final Cursor numCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[]{id}, null); 

        for(numCur.moveToFirst(); !numCur.isAfterLast(); numCur.moveToNext()){ 

         brTel = numCur.getString(numCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
         ime = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 

         tmpIme = new String[] {ime}; 

         for(int i = 0; i < tmpIme.length; i++){ 

          HashMap<String, String> imeMapa = new HashMap<String, String>(); 
          imeMapa.put("imeLista", ime); 
          imeMapa.put("Mobilni", brTel); 
          mapa.add(imeMapa); 

         } 

        } 
        numCur.close(); 

       } 

      } // While 
     } 

     SimpleAdapter sa = new SimpleAdapter(getApplicationContext(), mapa, R.layout.imenik, new String[] {"imeLista", "Mobilni"}, new int[] {R.id.tvImeImenik, R.id.tvSamoProba}); 
     lImenik.setAdapter(sa); 

答えて

0

私はあなたがSimpleCursorAdapterを使うべきだと考えています。その後、アプリケーションは十分速くなければなりません。それとも私は誤解しましたか?

@Override 
public void onCreate(Bundle bundle) { 
    super.onCreate(bundle);  
    final Cursor c = managedQuery(Contacts.CONTENT_URI, 
           new String[]{Contacts._ID, Contacts.DISPLAY_NAME}, 
           Contacts.DISPLAY_NAME + " != ?", new String[] {"NULL"}, 
           Contacts.DISPLAY_NAME); 

    String[] from = new String[] { android.provider.ContactsContract.Contacts.DISPLAY_NAME }; 
    int[] to = new int[] { R.id.nativecontacts_entry_name }; 
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.rawlayout, c, from, to); 

    setListAdapter(adapter); 
} 
+0

事は、私は700人の連絡先のようなものを持って自分の携帯電話上のアプリケーションを試した後、私は15秒を待たなければならない、そして私は、ListViewコントロール内のすべての連絡先を取得することです。 – Wolf87

+0

可能であれば速く進めたいですか? – Wolf87

+0

あなたのコードは必要でない何かをしています:連絡先を地図にコピーします。あなたは直接カーソルを使用することができます – kingston