我是android技术的初学者。我有一个列表视图,其中显示了我的联系人姓名,我想当我点击listview项目时,特定联系人的联系人ID显示在吐司中。我尝试了很多但却无法做到这一点。在谷歌上也没有找到合适的例子
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listcontact = (ListView)findViewById(R.id.listView1);
getnumber(this.getContentResolver());
listcontact.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
/* ContentResolver cr2 = null;
Cursor phone2 = cr2.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
String uid=phone2.getString(phone2.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));*/
String getselected=(String)(listcontact.getItemAtPosition(arg2));
long getsele=(long)(listcontact.getItemIdAtPosition(arg2));
String s=String.valueOf(getsele);
Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();
//phoneCall(getselected);
//Intent callIntent = new Intent(Intent.ACTION_CALL);
//callIntent.setData(Uri.parse("tel:0377778888"));
//startActivity(callIntent);
}
});
edittext=(EditText)findViewById(R.id.editText1);
edittext.requestFocus();
edittext.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
MainActivity.this.adapter.getFilter().filter(s);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void getnumber(ContentResolver cr) {
Cursor phone = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
while (phone.moveToNext()) {
phonenumber=phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
name=phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
System.out.println("...........name");
String list=name+
" "+phonenumber;
aa.add(list);
}
phone.close();
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,aa);
listcontact.setAdapter(adapter);
}
提前致谢。
答案 0 :(得分:1)
试试
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
long getsele=(long)(listcontact.get(arg3));
}
});
答案 1 :(得分:1)
制作课程
class Info {
public String name;
public String phone;
public String id;
@Override
public String toString() {
return name + " " + phone;
}
}
更新您的方法
public void getnumber(ContentResolver cr) {
Cursor phone = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
while (phone.moveToNext()) {
Info info = new Info();
info.phone = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
info.name = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
info.id =phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone._ID));
System.out.println("...........name");
aa.add(info);
}
phone.close();
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,aa);
listcontact.setAdapter(adapter);
}
listcontact.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
int Id= ((Info)aa.get(arg2)).id;
}});
答案 2 :(得分:0)
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
int viewId= arg1.getId()// this will return you the id of that particular view
}
});
答案 3 :(得分:0)
你有一个StringAdapter。这意味着ListView中每一行的内容都是一个String。在你的情况下是:
name 12121212121
通过这种方式(几乎)正确检索行的内容:
String getselected=(String)(listcontact.getItemAtPosition(arg2));
getselected将包含name 12121212121
。
CursorAdapter
的一个实现,
您可以做的最简单的事情是将字符串拆分为空格,但当然,如果字符串为name surname 12121212121
,它将无法正常工作。你可以做的另一件事是将信息包装在一个类中:
class Info {
public String name;
public String phone;
@Override
public String toString() {
return name + " " + phone;
}
}
您的适配器将是Info
和
String getselected=(String)(listcontact.getItemAtPosition(arg2));
会改变,如
Info getselected=(Info)(listcontact.getItemAtPosition(arg2));
名称将为getselected.name
,手机将为getselected.phone
。
答案 4 :(得分:0)
试试这个:
list_View.setOnItemClickListener( new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position,
long arg3) {
TextView txt_content = (TextView) view.findViewById(R.id.txt_content);
String uid = txt_content.getText().toString();
// work if you have uid into this textView
});
希望这可以提供帮助
答案 5 :(得分:0)
首先将所有数据添加到HashMap或ArrayList中。然后当你点击行时,那时使用ArrayList或HashMap来获取任何你想要的数据。
即
ArrayList<String> idArray=new ArrayList<String>();
idArray.add(YOUR DATA);
然后,当您点击行时,
String id= idArray.get(arg2);
即
ArrayList<HashMap<String, String>> mainData=new ArrayList<HashMap<String, String>>();
HashMap<String, String> data=new HashMap<String, String>();
data.put("id", YOUR ID DATA);
data.put("name", YOUR NAME DATA);
在HashMap中插入结束时,只需将该hashmap添加到mainData ArrayList中。
mainData.add(data);
然后,使用此arraylist获取您的记录,
String id= mainData.get(arg2).get("id");
String name= mainData.get(arg2).get("name");
答案 6 :(得分:0)
您可以在检索联系人时存储联系人ID,并在listview项目上设置标签。之后,您可以通过v.gettag()
获取listview的项目点击事件的ID