在Android的自定义列表视图中单击方法?

在Android的自定义列表视图中单击方法?,android,android-listview,Android,Android Listview,我有自定义列表视图。 有两个文本框和一个复选框。 还添加了Xml文件 package com.example.phonebook; import java.util.ArrayList; import java.util.List; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.content.Intent;

我有自定义列表视图。 有两个文本框和一个复选框。 还添加了Xml文件

package com.example.phonebook;

import java.util.ArrayList;
import java.util.List;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity implements AdapterView.OnItemClickListener{

ListView lst;

CustomPerson p;

private static final int CAMERA_REQUEST = 1888;
ImageView imageView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    super.setContentView(R.layout.activity_main);

    Button buttonSms, buttonCall, buttonPhoto;


    List<CustomPerson> list = new ArrayList<CustomPerson>();

    list = GetContacts();

    lst = (ListView) findViewById(R.id.lst_person);
    buttonSms= (Button) findViewById(R.id.btnSms);
    buttonCall = (Button) findViewById(R.id.btnCall);
    buttonPhoto = (Button) findViewById(R.id.BtnPhoto);


    lst.setAdapter(new CustomAdapter(getApplicationContext(),list));

    lst.setOnItemClickListener(this);

     public void onItemClick(AdapterView<?> parent, View view, int position,       long id) {

    // I want to get name and number here
     Toast.makeText(this,"Clicked!", Toast.LENGTH_LONG).show();
}

 @SuppressLint({ "NewApi", "NewApi" }) private List<CustomPerson> GetContacts()
{
    Intent intentContact = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
    List<CustomPerson> contactList = new ArrayList<CustomPerson>();

    Cursor cursor =  managedQuery(intentContact.getData(), null, null, null, null);      
       while (cursor.moveToNext()) 
       {          
           String Name = "";
           String PhoneNumber = "";
           String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
           Name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)); 

           String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));

           if ( hasPhone.equalsIgnoreCase("1"))
               hasPhone = "true";
           else
               hasPhone = "false" ;

           if (Boolean.parseBoolean(hasPhone)) 
           {
            Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,null, null);
            while (phones.moveToNext()) 
            {
              PhoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            }
            phones.close();
           }

           contactList.add(new CustomPerson(Name, PhoneNumber));

      }          
       cursor.close();
       return contactList;
}
package com.example.phonebook;
导入java.util.ArrayList;
导入java.util.List;
导入android.annotation.SuppressLint;
导入android.app.Activity;
导入android.content.Context;
导入android.content.Intent;
导入android.database.Cursor;
导入android.graphics.Bitmap;
导入android.net.Uri;
导入android.os.Bundle;
导入android.provider.contacts合同;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.AdapterView;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.CheckBox;
导入android.widget.CompoundButton;
导入android.widget.ImageView;
导入android.widget.ListView;
导入android.widget.TextView;
导入android.widget.Toast;
公共类MainActivity扩展活动实现AdapterView.OnItemClickListener{
ListView lst;
海关人员p;
专用静态最终int摄像机_请求=1888;
图像视图图像视图;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
super.setContentView(R.layout.activity_main);
按钮按钮MS、按钮调用、按钮照片;
列表=新的ArrayList();
list=GetContacts();
lst=(ListView)findViewById(R.id.lst_person);
buttonSms=(按钮)findViewById(R.id.btnSms);
buttonCall=(按钮)findViewById(R.id.btnCall);
buttonPhoto=(Button)findViewById(R.id.BtnPhoto);
setAdapter(新的CustomAdapter(getApplicationContext(),list));
lst.setOnItemClickListener(本);
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
//我想在这里查一下姓名和电话号码
Toast.makeText(这是“Clicked!”,Toast.LENGTH\u LONG.show();
}
@SuppressLint({“NewApi”,“NewApi”})私有列表GetContacts()
{
Intent intentContact=新意图(Intent.ACTION\u PICK,Contacts contact.Contacts.CONTENT\u URI);
List contactList=new ArrayList();
Cursor Cursor=managedQuery(intentContact.getData(),null,null,null,null);
while(cursor.moveToNext())
{          
字符串名称=”;
字符串PhoneNumber=“”;
String contactId=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.\u ID));
Name=cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_Name));
String hasPhone=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
if(hasPhone.equalsIgnoreCase(“1”))
hasPhone=“true”;
其他的
hasPhone=“false”;
if(Boolean.parseBoolean(hasPhone))
{
游标phones=getContentResolver().query(ContactsContract.CommonDataTypes.Phone.CONTENT\u URI,null,ContactsContract.CommonDataTypes.Phone.CONTACT\u ID+“=”+contactId,null,null);
while(phones.moveToNext())
{
PhoneNumber=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataTypes.Phone.NUMBER));
}
电话。关闭();
}
联系人列表。添加(新的CustomPerson(姓名、电话号码));
}          
cursor.close();
返回联系人列表;
}
我有CustomPerson类和CustomAdapter

当我从listview中单击一个人时,我想将此人的电话和号码添加到我的对象p中。
但是这些setOnItemClickListener和OnItemClick方法不起作用,因为当我运行项目时,我无法单击任何项。

我认为这是可单击复选框的问题。尝试在列表视图上的按钮解决类似问题,如前所述:


尝试使用lst.setAdapter(新的CustomAdapter(此,列表));在单击它时,如何获取名称或编号而不是getApplicationContext()您可以将onClickListener设置为适配器的getView方法内的复选框,并在那里获取listview项的位置。