Android 多联系人选取器列表[GetCheckEditePositions()]
下面是我的联系人选择类。我将使用这个类创建一个带有复选框的联系人列表,使用户可以选择从电话簿中选择多个联系人。我使用的布局xml在底部有两个按钮:全部清除和完成 当按下“完成”时,我需要它获取所有选中的名称,并将它们保存在列表/首选项文件中。现在,我可以找到要检查的职位,但我不知道如何检索与之相关的相应信息(所选联系人的姓名/电话号码)。我已经找了好几天的方法,但都没有找到任何有效的方法。非常感谢任何代码/伪代码/想法 联系\u选取器类:Android 多联系人选取器列表[GetCheckEditePositions()],android,Android,下面是我的联系人选择类。我将使用这个类创建一个带有复选框的联系人列表,使用户可以选择从电话簿中选择多个联系人。我使用的布局xml在底部有两个按钮:全部清除和完成 当按下“完成”时,我需要它获取所有选中的名称,并将它们保存在列表/首选项文件中。现在,我可以找到要检查的职位,但我不知道如何检索与之相关的相应信息(所选联系人的姓名/电话号码)。我已经找了好几天的方法,但都没有找到任何有效的方法。非常感谢任何代码/伪代码/想法 联系\u选取器类: public class Contact_Picker
public class Contact_Picker extends ListActivity {
protected static final String TAG = null;
public String[] Contacts = {};
public int[] to = {};
public ListView myListView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.contacts_list);
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 checkedPositions = myListView.getCheckedItemPositions();
Log.i(TAG,"Number of Checked Positions: " + checkedPositions.size());
if (checkedPositions != null)
{
int count = myListView.getCount();
for ( int i=0;i<count;i++)
{
Log.i(TAG,"Selected items: " + checkedPositions.get(i));
}
}
}
}); //<-- End of Done_Button
} //<-- end of onCreate();
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.IN_VISIBLE_GROUP + " = '"
+ ("1") + "'";
String[] selectionArgs = null;
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME
+ " COLLATE LOCALIZED ASC";
return managedQuery(uri, projection, selection, selectionArgs,
sortOrder);
} //<-- end of getContacts();
}
也许您可以手动跟踪您的联系人:
Vector<String> names=new Vector<String>();
private Cursor getContacts() {...
Cursor cur = managedQuery(uri, projection, selection, selectionArgs,
sortOrder);
int col = cur.getColumnIndex("display_name");
while(cur.moveToNext())
names.add(cur.getString(col));
cur.moveToFirst();
return cur;
}
向量名称=新向量();
私有游标getContacts(){。。。
Cursor cur=managedQuery(uri、投影、选择、selectionArgs、,
分拣机);
int col=cur.getColumnIndex(“显示名称”);
while(cur.moveToNext())
name.add(cur.getString(col));
cur.moveToFirst();
返回电流;
}
然后同步输出:
for ( int i=0;i<count;i++)
{
Log.i(TAG,"Selected items: " + checkedPositions.get(i));
Log.i(TAG,"Selected name: " + names.get(i));
}
for(int i=0;i我忘记了这篇文章,直到Pannous团队给出了答案。我确信他们的方法会奏效,但我最终使用了这个:
SparseBooleanArray checked = myListView.getCheckedItemPositions();
for (int i = 0; i < ContactsList.length; i++) {
Log.v(TAG, ContactsList[i] + ": " + checked.get(i)); //<-- Will print every contact with 'true'
if (checked.get(i) == true) {
Object o = getListAdapter().getItem(i);
String name = o.toString();
WriteSettings(self, name);
}
}
SparseBooleanArray checked=myListView.getCheckEditePositions();
对于(int i=0;i
public String[] getlistcontacts() {
// TODO Auto-generated method stub
int i=0;
ContentResolver cr = getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,null,null, null, null);
Cursor pCur = cr.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null , null);
int a= cur.getCount();
String[] cttlist=new String[a+1];
cur.moveToFirst();
pCur.moveToFirst();
for (int j=0; j<a;j++){
int nm=cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
//int nb=pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
String name=cur.getString(nm);
int nb=pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
String number=pCur.getString(nb);
cttlist[i]=name.concat("<;>").concat(number);
//Toast.makeText(PizzastimeActivity.this, "alkamkljziha"+name+":"+number, Toast.LENGTH_LONG).show();
i++;
cur.moveToNext();
pCur.moveToNext();
}
return cttlist;
}
public字符串[]getlistcontacts(){
//TODO自动生成的方法存根
int i=0;
ContentResolver cr=getContentResolver();
Cursor cur=cr.query(Contacts contract.Contacts.CONTENT\u URI,null,null,null);
游标pCur=cr.query(
ContactsContract.CommonDataTypes.Phone.CONTENT\u URI,null,null,null,null);
int a=cur.getCount();
String[]cttlist=新字符串[a+1];
cur.moveToFirst();
pCur.moveToFirst();
对于(int j=0;j,这里有一个正确的方法:
SparseBooleanArray selectedPositions = listView.getCheckedItemPositions();
for (int i=0; i<selectedPositions.size(); i++) {
if (selectedPositions.get(selectedPositions.keyAt(i)) == true) {
//do stuff
}
}
SparseBooleanArray selectedPositions=listView.GetCheckEditePositions();
对于(int i=0;如果您先检查一个项目,然后取消检查它,则它将不起作用。您的方法将报告所有曾经检查过的项目,即使它们不再被检查。请参阅我的答案。
SparseBooleanArray selectedPositions = listView.getCheckedItemPositions();
for (int i=0; i<selectedPositions.size(); i++) {
if (selectedPositions.get(selectedPositions.keyAt(i)) == true) {
//do stuff
}
}