Как сделать целую строку просмотра списка доступной?

Я пытаюсь сделать несколько контактов для моего приложения. Я использую специальный макет с флажком для выбора нескольких контактов. Проблема, с которой я сталкиваюсь, заключается в том, что для того, чтобы выбрать какой-либо конкретный контакт, мне нужно щелкнуть именно по флажку, если я нажму на другую часть строки, флажок не будет отмечен галочкой. Как я могу убедиться, что везде, где пользователь щелкнет по всей строке, галочка будет отмечена галочкой.

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, null, null, null, "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, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, "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; } } 

Solutions Collecting From Web of "Как сделать целую строку просмотра списка доступной?"

Попробуйте добавить этот атрибут в свой ListView

андроид: кликабельны = «истина»

Кроме того, я не вижу, где вы настраиваете прослушиватель Touch / Click для своего myListView.

Попробуйте изменить ширину макета флажка, чтобы заполнить родительский элемент следующим образом:

  android:layout_width="fill_parent" 

Думаю, это сработает для вас 🙂

Я бы добавил слушателя кликов в текстовое поле, и если щелкнуть, измените состояние флажка в его противоположное состояние (щелкните <-> unclicked)

Сначала вы можете использовать CheckedTextView вместо CheckBox. Может быть, только эта работа.

или

Попробуйте установить CheckBox focusable = "false", если они не работают, а затем фокусируются во всем представлении из вашего XML-макета.

Если вы используете кнопку / checkbox / radiobutton в своем элементе списка, тогда элемент списка не доступен для клика

Вы можете решить свою проблему, нажав здесь.