setOnItemClickListener()不能在自定义ListView @ Android上工作

我已经通过为每一行扩展LinearLayout实现了自定义ListView 。 每一行都有一个小缩略图,一个文本和一个check boxlist view正确部署,我可以滚动并通过它没有任何问题。

但是ListView似乎根本没有响应setOnItemClickListener() ,所以我不得不通过在每行内部的Text的getView()中设置单击监听器来解决这个问题,当我试图重用adapter 。 有没有人有办法解决吗?

Solutions Collecting From Web of "setOnItemClickListener()不能在自定义ListView @ Android上工作"

尝试这个
对于ListView,

 final ListView list = (ListView) findViewById(R.id.list); list.setItemsCanFocus(false); 

另外,请确保对于CheckBox里面的列表项设置focusable false

 android:focusable="false" android:focusableInTouchMode="false" 

老回答:我以前在这里写过

 android:focusable="false" android:clickable="false" 

当ImageButton在自定义视图中不起作用。一个必须使用button.setFocusable(false); 在运行时(从Java源代码)

编辑:有更优雅的解决scheme。 尝试在列表元素的根布局中添加android:descendantFocusability="blocksDescendants" 。 这将使点击onListItem成为可能和分别你可以处理button或ImageButton点击

对于您将项目视图设置为CheckBox的ListView

 android:focusable="false" android:clickable="false" 

http://code.google.com/p/android/issues/detail?id=3414

你是否在扩展适配器类中创build了任何ViewHolder? 如果是的话,那么在setOnItemClickListener()中创build一个你的占位符的实例,可能会像这样工作。

 @Override protected void onListItemClick(ListView l, View v, int position, long id) { View rowView = v; if (rowView == null) { LayoutInflater inflater = this.getLayoutInflater(); // GET INFLATE OF YOUR LAYOUT. rowView = inflater.inflate(R.layout.projectpeopledescrate, null); // CUSTOM ViewHolder Class Created in Adapter. // name,title,comment are my components on the same listview clicked item. PPDViewHolder viewHolder = new PPDViewHolder(); viewHolder.name = (TextView) rowView.findViewById(R.id.ppeopledescrvname); viewHolder.title = (TextView) rowView.findViewById(R.id.ppeopledescrvtime); viewHolder.comment = (TextView) rowView.findViewById(R.id.ppeoplervcomment); viewHolder.hiddenLayout = (RelativeLayout) rowView.findViewById(R.id.hiddenCommentPanel); rowView.setTag(viewHolder); } // ANOTHER object instance to apply new changes. PPDViewHolder holder = (PPDViewHolder) rowView.getTag(); // I've setted up visibility over the components. You can set your onClickListener over your buttons. holder.comment.setVisibility(View.GONE); holder.name.setVisibility(View.GONE); holder.title.setVisibility(View.GONE); holder.hiddenLayout.setVisibility(View.VISIBLE); holder.hiddenLayout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.MATCH_PARENT)); holder.hiddenLayout.bringToFront(); } 

希望,你想要的东西一样。 祝你好运!

我有这个代码

 this.mListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { Log.v(TAG,"loul"); } }); 

但它没有工作

所以我有理由把下一个onItemSelectedListener和它的工作Oo:

 this.mListView.setItemsCanFocus(false); this.mListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { Log.v(TAG,"loul"); } }); //listener for nothing but it allow OnItemClickListener to work this.mListView.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { } @Override public void onNothingSelected(AdapterView<?> arg0) { } }); 

设置这些属性:

  android:focusable="false" android:focusableInTouchMode="false" 

为您的list_item.xml文件中的所有UI元素。

如果在您的适配器集中没有解决这个问题:

  v.imageView.setFocusable(false); v.imageView.setFocusableInTouchMode(false);