如何在项目点击列表视图中查找联系人ID

时间:2014-02-07 11:35:30

标签: android eclipse listview android-listview

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

提前致谢。

7 个答案:

答案 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

之类的内容 Imo,因为你已经在使用游标,你应该使用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