Как работает XML onClick без прослушивателя событий? - PullRequest
0 голосов
/ 28 апреля 2019

События в Android требуют слушателя и обработчика.Это очевидно, когда мы видим в классе Java, что в этом слушателе есть Onclicklistener и метод Onclick.

Однако я запутался с методом XML Onclick, потому что в нем нет Onclicklistener.Они всегда необходимы, или слушатель скрыт в этом случае?

<Button
  android:Onclick="myMethod"
/>

public void myMethod(View view)
{
  //do magic here 
}

Ответы [ 2 ]

1 голос
/ 28 апреля 2019

В основном, когда attributes (like layout_width, onClick and so on) анализируется во время создания View, для этого View создается onClickListener, если этот атрибут был установлен в XML. Вы можете посмотреть это , например, здесь , так как он с открытым исходным кодом.

Имейте в виду, что я смотрел на класс View, поскольку Button расширяет TextView, а TextView расширяет View.

Чтобы объяснить это немного подробнее: Когда вы создаете View через XML, все атрибуты будут проанализированы. Тогда properties of the View are set according to those attributes. Вы также можете сделать это самостоятельно при определении custom View.

Просто отвечая на ваш вопрос: Да, onClickListener создается «скрытым» за XML во время создания представления

0 голосов
/ 28 апреля 2019

Нет разницы между установкой OnClickListener в коде Java или в XML.Если вы хотите установить прослушиватель через XML, вы должны реализовать соответствующий метод в коде Java.Когда вы устанавливаете прослушиватель через XML, то в синтаксическом анализаторе View конструктор и устанавливает слушателя автоматически:

case R.styleable.View_onClick:
        ...
    final String handlerName = a.getString(attr);
        if (handlerName != null) {
            setOnClickListener(new DeclaredOnClickListener(this, handlerName));
        }
    break;

Это будет выглядеть так. XML-код:

<Button android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Text"
    android:onClick="onClickFromXml" />

Затем в Java-коде:

public void onClickFromXml(View v) {
    // your click listener implementation
}
...