我有一个对象,其中文本周期和显示状态信息。当消息改变,我希望对象的Click事件来改变带你到该消息有关的活动。
所以,我有一个TextView mTitleView
和我指定这样的事件。
public void setOnTitleClickListener(OnClickListener listener) {
mTitleView.setOnClickListener(listener);
}
如何删除点击事件?还有一些没有一个可操作的区域,所以我想关闭click事件状态信息。我也希望能够通过循环这些点击事件,并正确处理它们,但我不能确定的最佳实践。
mTitleView.setOnClickListener(null)
应该做的伎俩。
更好的设计可能是做在OnClickListener状态的检查,然后确定点击是否不应该做的事情VS添加和结算点击听众。
注意,如果一个视图是不可点击(例如一个TextView),设置setOnClickListener(null)
将意味着视图是可点击。使用mMyView.setClickable(false)
如果你不想让你的看法是点击。例如,如果您使用的XML绘制的背景,这显示了不同国家不同的颜色,如果你的观点仍然可点击,用户可以点击它和不同的背景颜色将显示,这可能看起来很怪异。
也许setOnClickListener(null)
?
设置setOnClickListener(null)
是一个好主意,在运行时删除点击收听。
也有人评论说,在此之后调用View.hasOnClickListeners()
将返回true
,NO我的朋友。
下面是来自hasOnClickListeners()
类采取android.view.View
实施
public boolean hasOnClickListeners() {
ListenerInfo li = mListenerInfo;
return (li != null && li.mOnClickListener != null);
}
感谢上帝。它检查null
。
所以,一切是安全的。请享用 :-)
只要把,它很适合我
itemView.setOnClickListener(null);
以上答案似乎轻浮,不可靠的。我试图用一个简单的相对布局的ImageView的这样做,并没有禁用onclick事件。
做什么工作对我来说是使用的setEnabled。
ImageView v = (ImageView)findViewByID(R.id.layoutV);
v.setEnabled(false);
然后,您可以检查视图是否启用:
boolean ImageView.isEnabled();
另一种选择是使用setContentDescription(字符串字符串)和字符串getContentDescription()来确定的图的状态。
/**
* Remove an onclick listener
*
* @param view
* @author [email protected]
* @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();
}
}
}
只需重新初始化下文中的项目会做的伎俩。它会删除的onclick,onlonglick,onitemclick,onitemlongclick基于项目
mTitleView = findViewById(R.id.mTitleView);