Вы, кажется, устанавливаете другую кнопку в качестве слушателя для своей исходной кнопки, в зависимости от того, какие действия вы надеетесь сделать в слушателе, это может иметь неожиданное поведение.
Более простым решением было бы установить себя как слушатель, пока вы реализовали View.onClicklistener
в своем MyButton
, вы не установили его в качестве слушателя. Вам нужно будет сделать это в конструкторе.
Если вы хотите sh поддерживать пользовательский набор onClickListeners вместе с MyButton
listener, то вам нужно будет поддерживать переменную listener в вашем MyButton
класс, который вы можете затем явно назвать.
Наконец, используйте ваш MyButton
в вашем макете напрямую, вместо использования Button
, как вы в настоящее время делаете.
Ваш окончательный * Класс 1015 * должен выглядеть следующим образом:
public class MyButton extends androidx.appcompat.widget.AppCompatButton implements View.OnClickListener {
public MyButton(Context context) {
super(context);
init();
}
public MyButton(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public MyButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
setOnClickListener(this);
}
private View.OnClickListener mUserOnClickListener;
@Override
public void setOnClickListener(@Nullable OnClickListener l) {
if (l == this) {
super.setOnClickListener(l);
} else {
mUserOnClickListener = l;
}
}
@Override
public void onClick(View v) {
//Your actions
Toast.makeText(getContext(), "MyButton clicked", Toast.LENGTH_SHORT).show();
if (mUserOnClickListener != null) {
mUserOnClickListener.onClick(v);
}
}
}
PS - я бы также предложил вам go в соглашениях по присвоению имен для Java.