删除一个onclick监听器

我有一个对象的文本循环和显示状态消息。 当消息发生变化时,我想要更改对象的单击事件以将您带到消息所关联的活动。

所以,我有一个TextView mTitleView ,我分配这样的事件。

 public void setOnTitleClickListener(OnClickListener listener) { mTitleView.setOnClickListener(listener); } 

如何删除该点击事件? 有一些状态消息没有可操作的区域,所以我想closures点击事件。 我也希望能够循环浏览这些点击事件并妥善处理它们,但我不确定最佳做法。

mTitleView.setOnClickListener(null)应该做的伎俩。

更好的devise可能是检查OnClickListener中的状态,然后确定点击是否应该执行某些操作,而不是添加和清除点击监听器。

请注意,如果视图不可点击(例如TextView),则设置setOnClickListener(null)将意味着该视图是可点击的。 如果您不希望视图可点击,请使用mMyView.setClickable(false) 。 例如,如果您使用xml drawable作为背景,为不同的状态显示不同的颜色,如果您的视图仍然是可点击的,用户可以点击它并显示不同的背景颜色,这可能看起来很奇怪。

也许setOnClickListener(null)

设置setOnClickListener(null)是在运行时删除点击侦听器的好主意。

也有人评论说,调用View.hasOnClickListeners()之后将返回true我的朋友。

这里是从android.view.View类中取得的hasOnClickListeners()的实现

  public boolean hasOnClickListeners() { ListenerInfo li = mListenerInfo; return (li != null && li.mOnClickListener != null); } 

感谢上帝。 它检查null

所以一切都安全。 请享用 :-)

上面的答案看起来不够灵活和不可靠。 我试图用一个简单的相对布局的ImageView,并没有禁用onClick事件。

什么工作对我来说是使用setEnabled。

 ImageView v = (ImageView)findViewByID(R.id.layoutV); v.setEnabled(false); 

然后您可以检查视图是否启用:

 boolean ImageView.isEnabled(); 

另一种select是使用setContentDescription(String string)和String getContentDescription()来确定视图的状态。

  /** * Remove an onclick listener * * @param view * @author malin.myemail@gmail.com * @website https://github.com/androidmalin * @data 2016-05-16 */ public static void unBingListener(View view) { if (view != null) { try { if (view.hasOnClickListeners()) { view.setOnClickListener(null); } if (view.getOnFocusChangeListener() != null) { view.setOnFocusChangeListener(null); } if (view instanceof ViewGroup && !(view instanceof AdapterView)) { ViewGroup viewGroup = (ViewGroup) view; int viewGroupChildCount = viewGroup.getChildCount(); for (int i = 0; i < viewGroupChildCount; i++) { unBingListener(viewGroup.getChildAt(i)); } } } catch (Exception e) { e.printStackTrace(); } } } 

只是说,它已经为我工作

 itemView.setOnClickListener(null);