最近在做一个点菜的Android应用,要用到ListView,我希望可以通过ListView中的Button对点过的菜进行操作如下图
我希望通过点击加减改变菜品的总数量和左边所显示的菜品总价格
可是当我使用onItemClick方法时发现ListView不响应。。
这实在很坑
在网上找了很久看了无数篇的博文,解决方案大体以下两种:
1.将ListView的Item Layout中的所有子控件focusable属性设置为false
2.将item layout的根控件设置属性(推荐轻量级特别是修改别人的代码)
android:descendantFocusability=”blocksDescendant”
这样Item Layout就屏蔽了所有子控件获取Focus焦点的权限,不需要针对Item Layout中的每一个控件重新设置focusable属性
原因在于:
若你的item中有button或者checkbox等控件,默认情况下焦点focus是最先交给这些子控件,而ListView的Item能被选中的基础是它能获取Focus焦点,所以,我们可以通过将ListView中Item中包含的所有控件的focusable属性设置为false,这样ListView的Item就自动获得了Focus焦点的权限,也就可以被选中了,同时也会响应onItemClickListener中的onItemClick()方法。
还没结束,我做了无数尝试之后依然不响应。。
最后发现问题的原因在于ListView的样式文件中,我使用了HorizontalScrollView
而使用该种布局会导致以上的两种解决方案均失效。。
原因不明,假如有大神看到本菜鸟的博文,希望能指点一二。。
还有在ListView的样式文件的根布局假如使用了match_parent属性
那么在你的整体展示的<ListView/>这个标签中必须使用这个属性。。
否则就会报错。。