2012-09-09 50 views
1

我正在設計應用程序,我希望允許用戶選擇多個聯繫人來發送消息。我已經使用以下代碼成功檢索了列表視圖中帶有複選框的用戶列表。現在我想的是,當用戶點擊「完成」按鈕後,所有選定聯繫人的應該是手機號碼在EDITTEXT格式< + 919898xxxxxx>,裏克< + 919988xxxxxx>,也即所有檢索到的像約翰包含僅包含10位數字的電話號碼,例如「9898xxxxxx」應該存儲在一個由逗號(9898xxxxxx,9988xxxxxx)自動分隔的字符串中。我如何完成這項要求。獲取從列表視圖中選擇的聯繫人的詳細信息

public class ContactsActivity extends ListActivity { 

protected static final String TAG = null; 
public String[] Contacts = {}; 
public int[] to = {}; 
public ListView myListView; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_contacts); 
    final Button done_Button = (Button) findViewById(R.id.done_Button); 
    final Button clear_Button =(Button) findViewById(R.id.clear_Button); 
    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); 
    clear_Button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      Toast.makeText(getApplicationContext(),"Selections Cleared", Toast.LENGTH_SHORT).show(); 
      ClearSelections(); 
     } 
    }); 

    /** When 'Done' Button Pushed: **/ 
    done_Button.setOnClickListener(new View.OnClickListener() { 
     public void onClick (View v){ 
      Log.i(TAG,":Done Button Selected:"); 
      SparseBooleanArray selectedPositions = myListView.getCheckedItemPositions(); 
      Log.i(TAG,"Number of Checked Positions: " + selectedPositions.size()); 
      for (int i=0; i<selectedPositions.size(); i++) { 
       if (selectedPositions.get(selectedPositions.keyAt(i)) == true) { 
        //do stuff 

       } 
      } 
     } 
    }); 
} 

private void ClearSelections() { 
    int count = this.myListView.getAdapter().getCount(); 
    for (int i = 0; i < count; i++) { 
     this.myListView.setItemChecked(i, false); 
    } 
} 

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); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_contacts, menu); 
    return true; 
} 
} 
+0

配置它你也許應該找出你從selectedPosition得到什麼樣的內容,讓你.....代碼的一部分。 – JoxTraex

+0

@JoxTraex我沒有得到所選聯繫人的真實電話號碼,而是得到一些奇怪的值。 –

+0

找出那些奇怪的值是什麼,它應該與您的聯繫人數據相關。 – JoxTraex

回答

2

終於

 done_Button.setOnClickListener(new View.OnClickListener() { 
     public void onClick (View v){ 
      String name = null; 
      String number = null; 
      long [] ids = myListView.getCheckedItemIds(); 
      for(long id : ids) { 
       Cursor contact = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, 
         ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] { id + "" }, null); 
       while(contact.moveToNext()){ 
        name = contact.getString(contact.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
        //name+=name; 
        number = contact.getString(contact.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
        //number+=number; 
       } 
       Toast.makeText(getApplicationContext(), "Name: " +name + "\n" + "Number: " + number , Toast.LENGTH_LONG).show(); 
      } 
     } 
    }); 
0
String numberListString = ""; 

for (int i=0; i<selectedPositions.size(); i++) { 
       if (selectedPositions.get(selectedPositions.keyAt(i)) == true) { 
        //do stuff 
        numberListString = numberListString + "," + numberAtCurrentSelectedPostion; 

       } 
      } 

mEditText.setText(numberListString); 
+0

這不是特別有用。小心解釋你如何獲得'numberListString'? – Luksprog

+0

@Luksprog:抱歉,不清楚。 'numberListString'最初只是空的,我們會繼續追加當前的數字。 – Swayam

0

試試這個在您完成按鈕按: -

done_Button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      name.clear(); 
      number.clear(); 
      Log.i(TAG, ":Done Button Selected:"); 
      SparseBooleanArray selectedPositions = myListView 
        .getCheckedItemPositions(); 
      Log.i(TAG, 
        "Number of Checked Positions: " 
          + selectedPositions.size()); 
      Cursor cur = getContacts(); 
      for (int i = 0; i < selectedPositions.size(); i++) { 
       if (selectedPositions.get(selectedPositions.keyAt(i)) == true) { 
        // do stuff 
        cur.moveToPosition(selectedPositions.keyAt(i)); 
        name.add(cur.getString(1)); 
       } 
      } 
      for (int i = 0; i < name.size(); i++) { 
       Cursor lCursor = getContentResolver().query(
         ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
         null, "DISPLAY_NAME = ? ", 
         new String[] { name.get(i) }, null); 
       lCursor.moveToFirst(); 
       number.add(lCursor.getString(lCursor 
         .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))); 
       lCursor.close(); 
      } 

     } 
    }); 

其中名稱和編號是String類型的數組列表。你會得到所有選定的名稱和數字。現在,您可以按照自己的喜好在「編輯文本」中顯示它

我想這會幫助你。

相關問題