解决listview中的textview设置了setMovementMethod导致onItemclick无效的问题
来源:互联网 发布:php在线帮助文档系统 编辑:程序博客网 时间:2024/06/05 07:34
前提:
当listview的item 中有textview,且textview中内容使用了spannablestring,并且需要点击事件(如超链接等),为textview设置了setMovementMethod。
问题:
这时发现listview的onItemclick无效了,且不是全部无效,而是其中有设置了setMovementMethod的textview的item的点击失效,未有这种设置的item点击正常。
网上调查了一番,发现遇到这种问题的人很多,大部分是说由于LinkMovementMethod的OnTouchEvent返回true导致的。这基本上是扯淡,因为item中不仅仅有textview,或者说textview仅仅占item布局的一小部分。如果是OnTouchEvent导致了事件拦截,那么点击item其他位置应该有效果。测试结果是点击item任何部分都无效。
虽然网上分析的原因不是真正的原因,但是给出的解决方案基本都可行,大致有以下几种:
1、重写textview的OnTouchEvent,处理事件和返回
2、为textview设置OnTouchListener并处理事件和返回
等等。
但是这些前提都是不要为textview设置setMovementMethod,而是在textview的touch事件里自己处理。
这样比较复杂,那么真正的问题在哪里?
问题的根本原因就在setMovementMethod方法里,代码如下:
public final void setMovementMethod(MovementMethod movement) { if (mMovement != movement) { mMovement = movement; if (movement != null && !(mText instanceof Spannable)) { setText(mText); } fixFocusableAndClickableSettings(); // SelectionModifierCursorController depends on textCanBeSelected, which depends on // mMovement if (mEditor != null) mEditor.prepareCursorControllers(); }}可以看到调用了fixFocusableAndClickAbleSettings这个方法,这个方法代码如下:
private void fixFocusableAndClickableSettings() { if (mMovement != null || (mEditor != null && mEditor.mKeyListener != null)) { setFocusable(true); setClickable(true); setLongClickable(true); } else { setFocusable(false); setClickable(false); setLongClickable(false); }}可以看到当textview设置了movement,会为textview设置获取焦点、可点击、可长点击。
问题就出现在这里,可点击和可长点击都正常,但是获取焦点却关键,因为listview的Item要求布局里的组件不能获取焦点,因为这样onItemclick就会失效!
所以问题就是textview设置了movement获取了焦点,解决方法也很简单,在设置了setMovementMethod之后为textview在设置取消焦点即可,如下:
tutor.setMovementMethod(LinkMovementMethod.getInstance());tutor.setFocusable(false);这样就既可以正常的textview点击,而且不影响onItemCLick事件。
阅读全文
0 0
- 解决listview中的textview设置了setMovementMethod导致onItemclick无效的问题
- 解决textview.setMovementMethod后Listview的OnItemClickListener点击失效问题
- 解决 ListView的Item里TextView设置超链接后ListView 的OnItemClick失效的问题
- 解决listview onitemclick 点击无效问题
- listview中的item有button导致OnItemClick无效
- ListView的onItemClick监听无效,被listview中的item自控件偷取了焦点
- Listview的item中有button类导致onitemclick无效
- 解决ListView的ItemView中带有Button时,OnItemClick无效的问题
- 解决ListView里TextView设置LinkMovementMethod后导致其ItemClick失效的问题
- 解决ListView设置listSelector无效的问题
- listview中设置textView使用方法etonitemclicklistener 无效的问题
- 解决listview onItemClick无效 无法获取焦点
- 一般情况下ListView中的 item点击事件和 item 中的Button按钮点击事件 同时需要时,就会出现Button抢占了item的焦距问题,导致ListView中的item点击事件无效,解决
- Android中的ListView设置setOnItemClickListener后发现onItemClick毫无作用的问题
- 解决listview的属性divider设置无效的问题
- listView/gridView 的 onItemClick 无效的解决办法
- Listview item里面的textView.setMovementMethod(LinkMovementMethod.getInstance()) 让listview 点击生效解决方法
- Android中popupwindow中的listview的onItemClick方法无效de解决办法
- 我的博客发表练习
- subic项目总结(二)-quartz中的三种JobStore
- openssl req和x509命令及配置文件
- 1007. 素数对猜想 (20)
- 反汇编定位代码崩溃位置_4
- 解决listview中的textview设置了setMovementMethod导致onItemclick无效的问题
- OPatch failed with error code 73
- c#映射数据库中表的实体类
- hdu 4345 Permutation(dp)
- css 中 强制不换行和超出省略
- scss中文注释
- Android Fragment中加载,嵌套Unity视图
- opencv--特征点
- subic项目总结(三)-修改quartz默认连接池