Android: как выпустить обработчик событий onClick для всех элементов пользовательского интерфейса. - PullRequest
0 голосов
/ 19 июня 2020

У меня есть несколько кнопок в представлении:

<Button
        android:id="@+id/button"
        android:layout_width="176dp"
        android:layout_height="126dp"
        android:text="Button 1"
/>

<Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Überspringen"/>

Я действительно хочу вызвать событие onClick, если будет нажата какая-либо из этих кнопок, так называемое обертывание обработчика событий onClick для всего просмотра.

Что я пробовал: Чтобы выпустить событие onClick, необходимо добавить событие onclick к каждой кнопке, чем поместить событие onClick в контроллер et c.

Проблема: У меня может быть до 7-17 кнопок и c, они не хотят иметь слишком много функций событий onclick.

Вопрос: Как добавить обработчик события onClick для каждого элемента / кнопки пользовательского интерфейса?

Ответы [ 2 ]

0 голосов
/ 20 июня 2020

Не знаю, хорошая ли это практика, но я бы сделал это следующим образом:

Создайте свой метод в файле. java.

    public void myMethod(View view) {

}

Go в файл макета XML и найдите свои кнопки. Затем добавьте следующий атрибут к вашим кнопкам в коде XML.

android:onClick="myMethod"

Или вы можете просто найти этот атрибут на панели атрибутов в графическом дизайнере c.

0 голосов
/ 19 июня 2020

Вы можете создать такую ​​функцию:

    private void applyClickListener(View.OnClickListener listener, View view) {
        if (view instanceof ViewGroup) {
            for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
                applyClickListener(listener, ((ViewGroup) view).getChildAt(i));
            }
        } else if (view instanceof Button) {
            view.setOnClickListener(listener);
        }
    }

... а затем использовать ее так:

        applyClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d("zzz", "click just happened");
            }
        }, findViewById(android.R.id.content).getRootView());

Однако я оставляю за собой право упомянуть, что ваша задача звучит довольно странно.

...