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を使えば問題解決