【问题标题】:how to find contact id on item click of listview如何在listview的项目点击上查找联系人ID
【发布时间】:2014-02-07 11:35:30
【问题描述】:

我是 android 技术的初学者。我有一个列表视图,其中显示了我的联系人姓名,我希望当我单击列表视图项目时,特定联系人的联系人 ID 显示在 toast 中。我尝试了很多但无法做到这一点。也没有在谷歌上找到合适的例子

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

提前致谢。

【问题讨论】:

  • String id =phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone._ID));
  • Mayuri 我想要 itemclick 中的联系人 ID

标签: android eclipse listview android-listview


【解决方案1】:

试试看

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
        long arg3) {
       long getsele=(long)(listcontact.get(arg3));
}

});

【讨论】:

    【解决方案2】:

    创建一个类

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

    【讨论】:

    • 感谢@user1211209 您的回答帮助了我。为你 +1
    【解决方案3】:

    你有一个 String 的 ArrayAdapter。这意味着 ListView 中每一行的内容都是一个字符串。你的情况是:

     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

    【讨论】:

    • 感谢您的回答,但没有奏效-“不幸的是应用程序已停止”
    • 你是对的,有时我有 ABC XYZ +65 56 255 456。如何区分电话号码和姓名,因为在点击项目时,我必须拨打那个号码。
    • 我在答案中解释了。仔细阅读
    • 非常感谢先生。它运行良好。我忘记更改适配器类型,
    【解决方案4】:
     @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
        }
    });
    

    【讨论】:

    • 谢谢 anuj 我会试试的
    【解决方案5】:

    试试这个:

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

    希望对你有帮助

    【讨论】:

      【解决方案6】:

      首先将所有数据添加到 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);
      

      然后,使用这个数组列表来获取你的记录,

      String id= mainData.get(arg2).get("id");
      String name= mainData.get(arg2).get("name");
      

      【讨论】:

        【解决方案7】:

        您可以在检索联系人时存储联系人 ID,并在列表视图项上设置标签。之后,您可以通过 v.gettag() 获取列表视图的 id onItem 点击事件

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-12-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-04-10
          • 1970-01-01
          相关资源
          最近更新 更多