Можно ли расширить класс Button и реализовать в нем собственный слушатель OnClick? - PullRequest
0 голосов
/ 27 апреля 2020

Благодаря моему исследованию вопроса о том, как подключить слушателей кнопок к действиям и фрагментам, общий ответ заключается в том, чтобы связать вашего слушателя и внедрить его в каждый фрагмент / действие.

Однако, пока ваш слушатель generi c (или глобальный, затрагивающий все кнопки), это избыточно.

Итак, войдите в идею реализации 2: я мог бы расширить свой собственный класс Button и реализовать слушатель OnTouch. Звучит великолепно в теории, но я не уверен, как на самом деле установить слушателя в это состояние. Это на правильном пути, или есть лучший способ, который я здесь скучаю? Единственный другой вариант, о котором я подумал, - это создание другого класса, реализующего слушателя, но я не хотел создавать экземпляр класса каждый раз, когда создаю новую кнопку.

Это моя идея:

public final class EffectsButton extends androidx.appcompat.widget.AppCompatButton implements View.OnTouchListener {
    public EffectsButton(Context context) {
        super(context);
    }

    public EffectsButton(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN)
            handleButtonEffect(v, "onTouch.down");
        else if (event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL)
            handleButtonEffect(v, "onTouch.up");

        return false;
    }

    public static void handleButtonEffect(View view, String listenerType) {
        if (listenerType.equals("onTouch.down")) {
            view.getBackground().setColorFilter(0x77000000, PorterDuff.Mode.SRC_ATOP);
        } else if (listenerType.equals("onTouch.up") || listenerType.equals("onClick")) {
            view.getBackground().clearColorFilter();
        }

        view.invalidate();
    }
}

Основная деятельность:

// onCreate();

MyButton button = findViewById(R.id.mybutton);
button.setOnTouchListener(/* what to do here? */);

1 Ответ

0 голосов
/ 27 апреля 2020

Не берите в голову, я нашел ответ.

Все, что вам нужно сделать, это сослаться на себя:

MyButton button = findViewById(R.id.mybutton);
button.setOnTouchListener(button);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...