Jos*_*osh 184 android onclick listener textview
我有一个对象,文本循环并显示状态消息.当消息发生变化时,我希望更改对象的单击事件以将您带到与消息相关的活动.
所以,我有一个TextView mTitleView,我正在分配这样的事件.
public void setOnTitleClickListener(OnClickListener listener) {
mTitleView.setOnClickListener(listener);
}
Run Code Online (Sandbox Code Playgroud)
如何删除该点击事件?有些状态消息没有可操作区域,所以我想关闭click事件.我也希望能够循环浏览这些点击事件并妥善处理它们,但我不确定最佳做法.
Rob*_*ond 396
mTitleView.setOnClickListener(null) 应该做的伎俩.
更好的设计可能是检查OnClickListener中的状态,然后确定点击是否应该与添加和清除点击侦听器相比.
Fre*_*Nat 128
请注意,如果视图不可点击(例如TextView),则设置setOnClickListener(null)将表示视图是可点击的.使用mMyView.setClickable(false),如果你不想让你的看法是点击.例如,如果您使用xml drawable作为背景,它为不同的状态显示不同的颜色,如果您的视图仍然可以点击,用户可以单击它并显示不同的背景颜色,这可能看起来很奇怪.
设置setOnClickListener(null)是在运行时删除单击侦听器的好主意.
也有人评论说,在调用View.hasOnClickListeners()此之后将返回true,无我的朋友.
这是hasOnClickListeners()从android.view.View课堂上实施的
public boolean hasOnClickListeners() {
ListenerInfo li = mListenerInfo;
return (li != null && li.mOnClickListener != null);
}
Run Code Online (Sandbox Code Playgroud)
感谢上帝.它会检查null.
一切都很安全.请享用 :-)
您可以添加以下扩展功能:
fun View.removeClickListener() {
setOnClickListener(null)
isClickable = false
}
Run Code Online (Sandbox Code Playgroud)
然后对你的来电者你会这样做:
val textView = findViewById(R.id.activity_text)
textView.removeClickListener()
Run Code Online (Sandbox Code Playgroud)
上面的答案似乎轻浮和不可靠。我尝试在简单的相对布局中使用 ImageView 执行此操作,但它没有禁用 onClick 事件。
对我有用的是使用 setEnabled。
ImageView v = (ImageView)findViewByID(R.id.layoutV);
v.setEnabled(false);
Run Code Online (Sandbox Code Playgroud)
然后,您可以检查是否启用了视图:
boolean ImageView.isEnabled();
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用 setContentDescription(String string) 和 String getContentDescription() 来确定视图的状态。
| 归档时间: |
|
| 查看次数: |
124895 次 |
| 最近记录: |