setOnTouchListener警告

1215 ワード

警告の詳細は次のとおりです.
Custom view `view` has setOnTouchListener called on it but does not override performClick less... (Ctrl+F1) If a View that overrides onTouchEvent or uses an OnTouchListener does not also implement performClick and call it when clicks are detected, the View may not handle accessibility actions properly. Logic handling the click actions should ideally be placed in View#performClick as some accessibility services invoke performClick when a click action should occur.  Issue id: ClickableViewAccessibility
クリックイベントと衝突する可能性があります.
次のような問題が発生します.
view.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        return true;
    }
});
view.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        
    }
});

onTouchではtureを返し、同時にonClickの傍受を追加すると、onClickは実行されず、イベントはonTouchによって消化される.実行順を見るとわかるように、onTouchEvent=>performClick=>onClickなので、onTouchがtureに戻ると同時にonClick傍受が追加する、正しい処理方法はonTouchで適切な場所でperformClickメソッドを実行してonClickをトリガするべきである.
原因がわかったら注釈を追加して解決します
@SuppressLint("ClickableViewAccessibility")