View.setClickable无效的问题
问题描述
笔者最近做项目时发现button.setClickable(false)无效的问题,现在吧代码抽离出来,如下
button = (Button) findViewById(R.id.button);
button.setClickable(false);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(),"Click",Toast.LENGTH_SHORT).show();
}
});
问题分析
笔者查了一下setOnClickListener的源码发现了问题的原因
/**
* Register a callback to be invoked when this view is clicked. If this view is not
* clickable, it becomes clickable.
*
* @param l The callback that will run
*
* @see #setClickable(boolean)
*/
public void setOnClickListener(@Nullable OnClickListener l) {
if (!isClickable()) {
setClickable(true);
}
getListenerInfo().mOnClickListener = l;
}
也就是说setOnClickable会view的clickable恢复为true的状态。以后只要在setOnClickListener后面使用setClickable即可解决问题