Я не могу щелкнуть ListView в андроиде?

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

Но я сделал такую ​​же процедуру для другой деятельности. Используя пользовательский ListView, я могу щелкнуть это представление, и он отлично работает.

В чем проблема? Вот моя примерная кодировка:

ListView settingsList = (ListView) findViewById(R.id.manage_track_listView); ArrayList<ContactList> MySettingsList = new ArrayList<ContactList>(); ContactList setting1 = new ContactList("contact name 1", "Number 1", null); ContactList setting2 = new ContactList("contact name 2", "Number 2", null); ContactList setting3 = new ContactList("contact name 3", "Number 3", null); MySettingsList.add(setting1); MySettingsList.add(setting2); MySettingsList.add(setting3); ContactList list[] = new ContactList[MySettingsList.size()]; for(int i=0;i<MySettingsList.size();i++) { ContactList mySettings = MySettingsList.get(i); list[i] = new ContactList(mySettings.getName(), mySettings.getNumber(), mySettings.getImageIcon()); } ContactListAdapter adapter = new ContactListAdapter(this, R.layout.manage_track_list_custom_view, list); settingsList.setAdapter(adapter); System.out.println("before listener"); settingsList.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // TODO Auto-generated method stub System.out.println("Clicked " + position); } }); System.out.println("after listener"); 

Здесь ContactList – это класс, который имеет имя контакта, номер и байт [] для imageBlob. Если изображение равно null, я устанавливаю ic_launcher по умолчанию как контактное изображение. Класс адаптера:

 public class ContactListAdapter extends ArrayAdapter<ContactList> { Context context; int layoutResourceId; ContactList objects[] = null; View row; public ContactListAdapter(Context context, int layoutResourceId, ContactList[] objects) { super(context, layoutResourceId, objects); // TODO Auto-generated constructor stub this.context = context; this.layoutResourceId = layoutResourceId; this.objects = objects; System.out.println(objects[1].getName()); System.out.println(objects[1].getNumber()); System.out.println(objects[1].getImageIcon()); } @Override public View getView(final int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub row = convertView; final ContactListHolder holder; if ( row == null ) { LayoutInflater inflater = ((Activity)context).getLayoutInflater(); row = inflater.inflate(layoutResourceId, parent, false); holder = new ContactListHolder(); holder.image = (ImageView) row.findViewById(R.id.contactImage); holder.name = (TextView) row.findViewById(R.id.contactName); holder.number = (TextView) row.findViewById(R.id.contactNumber); holder.check = (CheckBox) row.findViewById(R.id.selectedContact); row.setTag(holder); } else { holder = (ContactListHolder)row.getTag(); } ContactList contact = objects[position]; if(contact.imageIcon != null) { Bitmap imgBitmap = BitmapFactory.decodeByteArray(contact.imageIcon, 0, contact.imageIcon.length); holder.image.setImageBitmap(imgBitmap); } else { holder.image.setImageResource(R.drawable.ic_launcher); } holder.name.setText(contact.name); holder.number.setText(contact.number); holder.check.setChecked(objects[position].isSelected()); return row; } static class ContactListHolder { ImageView image; TextView name; TextView number; CheckBox check; } } 

У меня более 100 контактов, поэтому добавлено только 3 объекта. В этом списке контактов я успешно получаю контактное изображение, имя, номер.

В чем проблема, которую ListView не может щелкнуть? Надеюсь, кто-нибудь из вас будет вести меня. Заранее спасибо.


Спасибо всем. Теперь получил результат, просто добавив android:focusable="false" в мои все дочерние представления. Спасибо за руководство.

Solutions Collecting From Web of "Я не могу щелкнуть ListView в андроиде?"

В вложенных представлениях дочернее представление всегда получает все сенсорные события. Если вы хотите, чтобы родительское представление (в вашем случае, строка listView), чтобы получить событие касания, вы должны вернуть false в дочерние события или установить их как android:clickable="false" в манифесте.

Добавить

  android:focusable="false" 

а также

  android:clickable="false" 

Для каждого дочернего вида, такого как imageview, textview, checkbox и т. Д. Вашего макета строки в файле manage_track_list_custom_view.xml

Я думаю, вы должны установить все свои кликабельные вещи, например. Флажки, кнопки и т. Д. Как не настраиваемые (в классе адаптера).

  holder.yourButton.setFocusable(false); holder.yourButton.setFocusableInTouchMode(false); holder.yourCheckbox.setFocusable(false); holder.yourCheckbox.setFocusableInTouchMode(false); 

Попробуй это:

Когда вы добавляете listView, звоните

 setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS); 

Посмотрите здесь для получения дополнительной информации.

Вы можете установить onclick listner в строку View в классе ContactListAdapter.

  holder.check.setChecked(objects[position].isSelected()); row.setOnclickListner(new Onclicklistner(){ // Your code here }); return row; 

У меня такая же проблема, когда я не могу щелкнуть по другой части элемента в представлении списка, просто можно щелкнуть в текстовом или образе просмотра внутри этого элемента. Поэтому я задал свой текст:

 android:layout_width="fill_parent" 

Мой пункт:

 <relative> [image][textview] relative/> 

И щелчок события работал нормально, потому что я нажимаю на текстовое изображение. Надежда поможет любой проблеме.