根原因:listview(或其他有adapter的view)没有获得焦点

列子:

   <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

   android:layout_width="fill_parent"
   android:layout_height="fill_parent"//误点一:fill_parent
   android:orientation="vertical"
   android:descendantFocusability="blocksDescendants" //误点二
   >

正确应该是

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical"
   >

切记:

adapter的xml的主layout(RelativeLayout)不能用fill_parent

原因有二。

一:

 原因:在adapter的xml中设置了 android:descendantFocusability="blocksDescendants"

注释下面的item就是ListView的item

   android:beforeFocusability      viewgroup在子项处理之前获得焦点

   android:afterFocusability            viewGroup在子项处理之后获得焦点

   android:blocksFocusability          viewGroup阻止子项获得焦点(以此子项的子项就能获得焦点)

 二:在layout_......设置了fill_parent,

三 Android 长按setOnItemLongClickListener 注意细节

 原理是fill_parent原来就是要求本layout全屏,但listview(或其他有adapter的view)限制item的高宽。

gridview.setOnItemLongClickListener(new OnItemLongClickListener() {                                    @Override         public boolean onItemLongClick(AdapterView
arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub Log.e("setOnItemLongClickListener", "setOnItemLongClickListener"); return true; } }); gridview.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView
arg0, View arg1, int arg2, long arg3) { Log.e("setOnItemClickListener", "setOnItemClickListener"); } });

1.如果返回false那么onItemClick仍然会被调用。而且是先调用onItemLongClick,然后调用onItemClick。 如果返回true那么click就会被吃掉,onItemClick就不会再被调用了。

2.监听onItemClick以及onItemLongClick影响弹出菜单吗? onItemClick不影响;onItemLongClick如果返回true那么就会吃掉click事件,导致菜单不能弹出。

3.如何让包含button的item也能弹出菜单,回调onItemClick以及onItemLongClick的监听器呢? 需要设置Button属性:android:focusable="false"  android:focusable="false"android:longClickable="true"  android:longClickable="true"否则无法收到onItemLongClick