Как установить на слушателя щелчка для пользовательской кнопки? - PullRequest
0 голосов
/ 02 мая 2020

Я попытался настроить мой слушатель для моего пользовательского класса кнопок. Тем не менее, похоже, что мой слушатель не отображается в View. Любая идея объединить мой вид кнопки и мою пользовательскую кнопку?

У меня есть фрагмент с пользовательской кнопкой на линейном макете XML

<LinearLayout>
 ...
<Button>
...
</Button>

<LinearLayout>

Я попытался настроить прослушиватель щелчков для кнопка во фрагменте метода onActivityCreated.

public class myFragment extend Fragment {

@Override
public void onActivityCreated (){

Button myNewButton = new myButton();
myNewButton = root.findViewByID.(R.id.button);
myNewButton.setOnClickListener(new myButton());

}

}

Мой класс пользовательских кнопок с методом setonclicklistener

public class myButton extend button implements View.onClicklistener {

@Override
public void setOnClickListener (OnClickListener listener){
super.setonClickListener(listener);
}

@Override
public void onClick(View view) {
//action to do after on click
}

}

Ответы [ 2 ]

0 голосов
/ 02 мая 2020

Вы, кажется, устанавливаете другую кнопку в качестве слушателя для своей исходной кнопки, в зависимости от того, какие действия вы надеетесь сделать в слушателе, это может иметь неожиданное поведение.

Более простым решением было бы установить себя как слушатель, пока вы реализовали 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.

0 голосов
/ 02 мая 2020

Попробуйте:

Удалить эту строку из myFragment:

myNewButton.setOnClickListener(new myButton());

Сделайте это в myButton:

public class myButton extend button implements View.onClicklistener {

@Override
public void setOnClickListener (OnClickListener listener){
//set like this
super.setonClickListener(this);
}

@Override
public void onClick(View view) {
//action to do after on click
}

}
...