android – 如何使整列列表视图可以点击?

前端之家收集整理的这篇文章主要介绍了android – 如何使整列列表视图可以点击?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在为我的应用程序制作多个联系人选择器.我使用带有复选框的自定义布局来选择多个联系人.我所面临的问题是,为了选择任何特定联系人,我需要点击确切的复选框,如果我点击行的其他部分,复选框不会被勾选.如何确保用户在整个行中单击的复选框被勾选.

activity_contacts_picker.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<Button
    android:id="@+id/btnShow"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Show Selected" />

<ListView
    android:id="@android:id/list"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/btnShow" >
</ListView>

</RelativeLayout>

custcontactview.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingBottom="5.0px"
android:paddingLeft="5.0px"
android:paddingTop="5.0px" >

<TextView
    android:id="@+id/txtContactName"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="15.0dip"
    android:layout_toLeftOf="@+id/checkBox1"
    android:layout_alignParentLeft="true"
    android:text="Medium Text"
    android:textAppearance="?android:textAppearanceMedium" />

<TextView
    android:id="@+id/txtContactNumber"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/txtContactName"
    android:layout_alignParentLeft="true"
    android:layout_marginLeft="15.0dip"
    android:layout_toLeftOf="@+id/checkBox1"
    android:text="Small Text"
    android:textAppearance="?android:textAppearanceSmall" />

<CheckBox
    android:id="@+id/checkBox1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_marginRight="10dp"
    android:clickable="true"
    android:focusable="true"
    android:focusableInTouchMode="false" />

</RelativeLayout>

ContactsPicker.java

public class ContactsPicker extends ListActivity {

protected Object mActionMode;
public int selectedItem = -1;
private Button btnShowContacts;
private ListView myListView;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_contacts_picker);
    myListView = getListView();
    btnShowContacts = (Button) findViewById(R.id.btnShow);
    btnShowContacts.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Toast.makeText(getApplicationContext(),"Button Clicked",Toast.LENGTH_SHORT).show();
            String name = null;
            String number = null;
            long[] ids = myListView.getCheckedItemIds();
            for (long id : ids) {
                Cursor contact = getContentResolver().query(
                        ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                                + " = ?",new String[] { id + "" },null);
                while (contact.moveToNext()) {
                    name = contact.getString(contact
                            .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                    number = contact.getString(contact
                            .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                }
                Toast.makeText(getApplicationContext(),"Name: " + name + "\n" + "Number: " + number,Toast.LENGTH_LONG).show();
            }
        }
    });
    ArrayList<Map<String,String>> list = buildData();
    String[] from = { "Name","Phone" };
    int[] to = { R.id.txtContactName,R.id.txtContactNumber };
    SimpleAdapter adapter = new SimpleAdapter(this,list,R.layout.custcontactview,from,to);
    setListAdapter(adapter);
}

private ArrayList<Map<String,String>> buildData() {
    ArrayList<Map<String,String>> list = new ArrayList<Map<String,String>>();
    list.clear();
    Cursor people = getContentResolver().query(
            ContactsContract.Contacts.CONTENT_URI,"UPPER(" + ContactsContract.Contacts.DISPLAY_NAME + ") ASC");
    while (people.moveToNext()) {
        String contactName = people.getString(people
                .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
        String contactId = people.getString(people
                .getColumnIndex(ContactsContract.Contacts._ID));
        String hasPhone = people
                .getString(people
                        .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
        if ((Integer.parseInt(hasPhone) > 0)) {
            Cursor phones = getContentResolver().query(
                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI,ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                            + " = " + contactId,"UPPER(" + ContactsContract.Contacts.DISPLAY_NAME
                            + ") ASC");
            while (phones.moveToNext()) {
                String phoneNumber = phones
                        .getString(phones
                                .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                Map<String,String> NamePhoneType = new HashMap<String,String>();
                NamePhoneType.put("Name",contactName);
                NamePhoneType.put("Phone",phoneNumber);
                list.add(NamePhoneType);
            }
            phones.close();
        }
    }
    people.close();
    //startManagingCursor(people);
    return list;
}
}

解决方法

尝试将此属性添加到您的ListView

机器人:可点击=“真”

另外,我看不到你在哪里设置Touch / Click监听器到你的myListView.

猜你在找的Android相关文章