View.setClickableが無効な問題
1820 ワード
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を使えば問題解決