在ListView点击事件中,如何将ArrayList的tel.num关联到ACTION_DIAL Intent?
嘿,这个问题其实很好解决,核心就是根据ListView点击的位置,从你的ArrayList里取出对应位置的电话号码,替换掉硬编码的部分就行!我给你分两种常见情况说明:
情况1:你的ArrayList直接存储字符串类型的电话号码
如果你的ArrayList里存的就是纯电话号码字符串(比如ArrayList<String> phoneList = new ArrayList<>();),那直接在点击事件里通过position索引取出对应元素即可:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { // 从ArrayList中获取当前点击项的电话号码 String targetPhone = phoneList.get(position); Intent intent = new Intent(Intent.ACTION_DIAL); // 把拿到的号码拼到Uri里 intent.setData(Uri.parse("tel:" + targetPhone)); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } } });
情况2:你的ArrayList存储自定义对象(包含tel.num属性)
如果你的ArrayList里存的是自定义实体类(比如一个Contact类,里面有num字段存电话号码),那先取出对应位置的对象,再获取num属性:
先假设你的自定义类大概是这样的:
public class Contact { // 这里如果是规范写法,建议用private属性加getter方法 public String num; // 构造方法、其他属性... }
那点击事件的代码修改如下:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { // 获取当前点击位置的Contact对象 Contact selectedContact = yourContactList.get(position); // 取出电话号码(如果是private属性就用selectedContact.getNum()) String targetPhone = selectedContact.num; Intent intent = new Intent(Intent.ACTION_DIAL); intent.setData(Uri.parse("tel:" + targetPhone)); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } } });
额外小技巧:直接从Adapter获取数据
其实你也可以不用依赖外部的ArrayList,直接通过adapterView.getItemAtPosition(position)从Adapter里拿当前项的数据,这样更灵活(比如Adapter数据更新时不用同步外部列表):
// 如果是字符串Adapter String targetPhone = (String) adapterView.getItemAtPosition(position); // 如果是自定义对象Adapter Contact selectedContact = (Contact) adapterView.getItemAtPosition(position); String targetPhone = selectedContact.num;
这样修改后,点击ListView的每一项,就会自动调用拨号界面并填入对应位置的电话号码啦!
内容的提问来源于stack exchange,提问作者Mohamed Adel
相关产品推荐
相关产品推荐

