我不能在Android中单击ListView?

我使用联系人同步制作了一个应用 我列出了以下联系信息与照片,名称和编号。 我成功地列出了所有这些东西在一个自定义ListView中 ,但我不能单击ListView 。 它看起来像locking,无法点击它。

但是我对另一个活动做了同样的程序。 使用自定义的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的类。 如果图像为空,我将默认的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"来获得结果。 感谢你的指导。

Related of "我不能在Android中单击ListView?"

在嵌套视图中,子视图总是首先获取所有的触摸事件。 如果你想要父视图(在你的情况下,listView的行),以获得一个触摸事件,你必须在子事件返回false或将其设置为清单中的android:clickable="false"

  android:focusable="false" 

  android:clickable="false" 

对于像viewview,textview,checkbox等每个子视图您的行布局意味着在manage_track_list_custom_view.xml

我想你必须设置所有可点击的东西,例如。 checkbox,button等不可聚焦(在适配器类中)。

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

尝试这个:

当你添加listView时,调用

 setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS); 

在这里看看更多的信息。

您可以将onclick listner设置为ContactListAdapter类的View行。

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

当我无法点击列表视图中某个项目的其他部分时,我也遇到同样的问题,只需点击该项目内的textview或imageview即可。 所以我设置了我的textview:

 android:layout_width="fill_parent" 

我的项目是这样的:

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

点击事件工作正常,因为我点击的TextView。 希望能帮助任何人有同样的问题。