2012-09-13 15 views
6

के साथ एंड्रॉइड संपर्क पिकर एक ही विषय के बारे में बहुत सी चर्चाएं चल रही हैं, लेकिन यहां 4 घंटे खर्च करने के बाद, मुझे एक वैध विवरण या चेकबॉक्स के साथ संपर्क पिकर बनाने का लिंक नहीं मिला।चेकबॉक्स

मेरे पास बटन और listviewcheckbox के साथ एक गतिविधि है। मैंने संपर्कों को सही तरीके से दिखाने में कामयाब रहा है। अब मैं चयनित संपर्क फोन नंबर bundle (मुझे सबसे अच्छा तरीका लगता है) में वापस करना चाहता हूं ताकि मैं onActivityResult() में संख्याओं की सूची प्राप्त कर सकूं। मुझे यकीन नहीं है कि जिस तरह से मैं अनुसरण कर रहा हूं वह सही है या नहीं।

public class ContactPickerMulti extends ListActivity implements OnClickListener { 

    // List variables 
    public String[] Contacts = {}; 
    public int[] to = {}; 
    public ListView myListView; 

    Button save_button; 
    private TextView phone; 
    private String phoneNumber; 
    private Cursor cursor; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.contacts_multi); 

     // Initializing the buttons according to their ID 
     save_button = (Button) findViewById(R.id.contact_done); 

     // Defines listeners for the buttons 
     save_button.setOnClickListener(this); 

     Cursor mCursor = getContacts(); 
     startManagingCursor(mCursor); 

     ListAdapter adapter = new SimpleCursorAdapter(
       this, 
       android.R.layout.simple_list_item_multiple_choice, 
       mCursor, 
       Contacts = new String[] { ContactsContract.Contacts.DISPLAY_NAME }, 
       to = new int[] { android.R.id.text1 }); 

     setListAdapter(adapter); 
     myListView = getListView(); 
     myListView.setItemsCanFocus(false); 
     myListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 

    } 

    private Cursor getContacts() { 
     // Run query 
     Uri uri = ContactsContract.Contacts.CONTENT_URI; 
     String[] projection = new String[] { ContactsContract.Contacts._ID, 
       ContactsContract.Contacts.DISPLAY_NAME }; 
     String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + " = '" 
       + ("1") + "'"; 
     String[] selectionArgs = null; 
     String sortOrder = ContactsContract.Contacts.DISPLAY_NAME 
       + " COLLATE LOCALIZED ASC"; 

     return managedQuery(uri, projection, selection, selectionArgs, 
       sortOrder); 
    } 

    public void onClick(View src) { 
     Intent i; 
     switch (src.getId()) { 
     case R.id.contact_done: 

      SparseBooleanArray selectedPositions = myListView 
        .getCheckedItemPositions(); 
      SparseBooleanArray checkedPositions = myListView 
        .getCheckedItemPositions(); 
      if (checkedPositions != null) { 
       for (int k = 0; k < checkedPositions.size(); k++) { 
        if (checkedPositions.valueAt(k)) { 
          String name = 
           ((Cursor)myListView.getAdapter().getItem(k)).getString(1); 
          Log.i("XXXX",name + " was selected"); 
         } 
       } 
      } 

      break; 
     } 

    } 
} 

मैं सरणी या सूची के रूप में संख्या भेजना चाहते हैं:

यहाँ मेरी कोड है। इसे करने का बेहतरीन तरीका क्या है? किसी भी मदद या सही रास्ते के लिए अग्रणी की सराहना की है।

+0

कृपया एडाप्टर कोड तो मैं कर सकते हैं जोड़ने पता है कि आप फोन नंबर कैसे प्राप्त करते हैं। –

+0

@Yul कोड अपडेट किया गया .. अब यह संपर्क के नाम को प्रिंट करेगा :) मुझे बस नाम के बजाय फोन नंबर प्राप्त करने की आवश्यकता है;) समाप्त हो गया! –

उत्तर

3

मैं onClick में इस कोड का उपयोग करें:

long[] id = getListView().getCheckedItemIds();// i get the checked contact_id instead of position 
     phoneNumber = new String[id.length]; 
     for (int i = 0; i < id.length; i++) { 

      phoneNumber[i] = getPhoneNumber(id[i]); // get phonenumber from selected id 

     } 

     Intent pickContactIntent = new Intent(); 
     pickContactIntent.putExtra("PICK_CONTACT", phoneNumber);// Add checked phonenumber in intent and finish current activity. 
     setResult(RESULT_OK, pickContactIntent); 
     finish(); 

//

private String getPhoneNumber(long id) { 
    String phone = null; 
    Cursor phonesCursor = null; 
    phonesCursor = queryPhoneNumbers(id); 
    if (phonesCursor == null || phonesCursor.getCount() == 0) { 
     // No valid number 
     signalError(); 
     return null; 
    } else if (phonesCursor.getCount() == 1) { 
     // only one number, call it. 
     phone = phonesCursor.getString(phonesCursor 
       .getColumnIndex(Phone.NUMBER)); 
    } else { 
     phonesCursor.moveToPosition(-1); 
     while (phonesCursor.moveToNext()) { 

      // Found super primary, call it. 
      phone = phonesCursor.getString(phonesCursor 
        .getColumnIndex(Phone.NUMBER)); 
      break; 

     } 
    } 

    return phone; 
} 


private Cursor queryPhoneNumbers(long contactId) { 
    ContentResolver cr = getContentResolver(); 
    Uri baseUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, 
      contactId); 
    Uri dataUri = Uri.withAppendedPath(baseUri, 
      ContactsContract.Contacts.Data.CONTENT_DIRECTORY); 

    Cursor c = cr.query(dataUri, new String[] { Phone._ID, Phone.NUMBER, 
      Phone.IS_SUPER_PRIMARY, RawContacts.ACCOUNT_TYPE, Phone.TYPE, 
      Phone.LABEL }, Data.MIMETYPE + "=?", 
      new String[] { Phone.CONTENT_ITEM_TYPE }, null); 
    if (c != null && c.moveToFirst()) { 
     return c; 
    } 
    return null; 
} 

और गतिविधि के अंतिम onActivityResult जो आप शुरू PickContactsActivity

// TODO Auto-generated method stub 
    // super.onActivityResult(requestCode, resultCode, data); 

    if (resultCode == RESULT_OK) { 

     if (requestCode == Constants.REQUEST_CODE_PICK_CONTACT) { 


      if (data != null) { 

       String[] temp = data.getStringArrayExtra("PICK_CONTACT"); 

      } 
     } 

    } 

} 
+0

आपके उत्तर के लिए धन्यवाद। बहुत बहुत धन्यवाद। बीटीडब्लूडब्ल्यू में मुझे त्रुटियां हैं, 'फोन कर्सर = क्वेरीफोनकॉर्न्स (आईडी);' मुझे क्वेरीफोनफोन (आईडी) में क्या करना चाहिए; ' –

+0

यह 'क्लिक करें' में मिले चेक संपर्क की आईडी है 'getPhoneNumber (id [i]); '। मैं अपने ऐप के लिए इस कोड का उपयोग कर रहा हूं इसलिए मैं इसे चलाने का आश्वासन देता हूं। तो आपको बस अपने फिट करने के लिए थोड़ा सा बदलना होगा –

+0

मैं कहीं भी खो गया हूं, मेरा वर्तमान कोड है http://pastebin.com/tdTpFR6t क्या आप इसे देख सकते हैं? –

2

जब में startActivityForResult(newActivity) का उपयोग कर newActivity आप Activity बंद करने के लिए finish() के बाद setResult(RESULT_OK) के लिए एक कॉल करना चाहिए। वैकल्पिक रूप से आप setResult(RESULT_OK, intent) पर कॉल में Intent शामिल कर सकते हैं। setResult() पर कॉल onActivityResult() के कार्यान्वयन को कॉल करने के लिए नेतृत्व करेगा जहां आप Activity के परिणाम को संभाल सकते हैं। तो आपके मामले में आप केवल Intenet बनाएंगे और putExtra() विधियों में से किसी एक का उपयोग करके अपनी सरणी सूची जोड़ देंगे। उस Intent को onActivityResult() पर भेज दिया जाएगा जहां आप उस जानकारी को निकाल सकते हैं। अधिक जानकारी के लिए Intent और Activity देखें।

+0

आपके उत्तर के लिए धन्यवाद। मैंने कोड अपडेट किया है और अब मैं चेक किए गए आइटम की स्थिति प्राप्त कर सकता हूं। तो मैं संपर्क जानकारी कैसे प्राप्त कर सकता हूं? मेरा मतलब है कि मेरे पास केवल आइटम की स्थिति है और मैं सूची बनाने के लिए कैसे क्वेरी कर सकता हूं? कोई उपाय? –

+0

आप किसी भी प्रकार का डेटा प्राप्त कर सकते हैं, तो समस्या कहां है? बस एक ArrayList या कुछ डाल दिया। –

संबंधित मुद्दे