开发者社区> 科技小先锋> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

OnItemClickListener不响应

简介:
+关注继续查看

根原因: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的高宽。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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



本文转自lilin9105 51CTO博客,原文链接:http://blog.51cto.com/7071976/1216753,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
封装,分用、客户端服务器以及请求响应
封装,分用、客户端服务器以及请求响应
0 0
重定向响应
什么是重定向响应
0 0
HTTP/HTTPS的请求和响应
HTTP/HTTPS的请求和响应
0 0
如何判断请求是否发送成功以及获取请求中的数据
如何判断请求是否发送成功以及获取请求中的数据
0 0
无请求不响应?
无请求不响应?
0 0
来玩Play框架02 响应
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!    我上一章总结了Play框架的基本使用。这一章里,我将修改和增加响应。 HTTP协议是按照“请求-响应”的方式工作。
630 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载