您的位置:首页 > 其它

GridView, ListView的item中嵌入button或其他view导致item点击失效的研究

2014-08-29 17:19 411 查看
GridView, ListView的item中如果嵌入了button会导致item点击失效。

原因是:

AbsListView.java 中的代码:

private void onTouchUp(MotionEvent ev) {
switch (mTouchMode) {
case TOUCH_MODE_DOWN:
case TOUCH_MODE_TAP:
case TOUCH_MODE_DONE_WAITING:
final int motionPosition = mMotionPosition;
final View child = getChildAt(motionPosition - mFirstPosition);
if (child != null) {
if (mTouchMode != TOUCH_MODE_DOWN) {
child.setPressed(false);
}

final float x = ev.getX();
final boolean inList = x > mListPadding.left && x < getWidth() - mListPadding.right;
if (inList && !child.hasFocusable()) {
if (mPerformClick == null) {
mPerformClick = new PerformClick();
}

final AbsListView.PerformClick performClick = mPerformClick;
performClick.mClickMotionPosition = motionPosition;
performClick.rememberWindowAttachCount();

mResurrectToPosition = motionPosition;
...
}
在响应onItemClickListener之前会先判断子view是否有焦点。

!child.hasFocusable()

如果无焦点才会响应onItemClickListener中的内容。

所以必须保证子类无焦点。

方法1. item容器调用 setDescendantFocusability( FOCUS_BLOCK_DESCENDANTS); button 调用setFocusable(false)

方法2. xml文件中 配置 android:descendantFocusability= "blocksDescendants"
button 设置 android:focusable = "false"

spannableString 点击失效的处理方法:

http://stackoverflow.com/questions/8558732/listview-textview-with-linkmovementmethod-makes-list-item-unclickable
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐