Android java button onclick example

Android Button OnClick Example

The android.widget.Button is a frequently used widget in the android application. You can add as many buttons as you need in a layout view object. But how to listen and respond to the click event when the user clicks the buttons? This example will tell you how.

1. Listen And Response Button Click Event.

  1. You have two methods to respond button click event as below.
  2. Create a View.OnClickListener object and assign the object to the button instance using the setOnClickListener() method.
button3.setOnClickListener(new View.OnClickListener() < @Override public void onClick(View view) < . >>);
public class ButtonActivity extends AppCompatActivity implements View.OnClickListener < @Override public void onClick(View view) < . >>

2. Android Button OnClick Event Listener Example.

  1. There are three buttons in this example.
  2. The first two buttons are added in the layout XML file. The third green button is added in the java source code.
  3. Click each button will pop up a toast message.
  4. Below is this example demo video ( android button onclick example ).

3. Android Button OnClickListener Example Source Files.

  1. This example contains only two source files.
  2. Main activity java file.
  3. Main activity layout XML file.

3.1 Main Activity Java File.

package com.dev2qa.androidfragment; import android.content.Context; import android.graphics.Color; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Gravity; import android.view.View; import android.widget.Button; import android.widget.LinearLayout; import android.widget.Toast; public class ButtonActivity extends AppCompatActivity implements View.OnClickListener < private LinearLayout linearLayout = null; // Button1 and button2 is added in layout xml file. private Button button1 = null; private Button button2 = null; private Context context = null; @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_button); setTitle("dev2qa.com - Android Button Example."); initControls(); // Button3 is created in java code dynamically. // Create button3 in code. Button button3 = new Button(context); button3.setText("Button Three Is Added In Code"); button3.setTextSize(20); button3.setAllCaps(false); button3.setBackgroundColor(Color.GREEN); // Add a OnClickListener object to button3. button3.setOnClickListener(new View.OnClickListener() < @Override public void onClick(View view) < Toast toast = Toast.makeText(context, "You clicked button three.", Toast.LENGTH_SHORT); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); >>); // Add button3 to the wrapper linear layout object to show it. linearLayout.addView(button3); > /* Initialise layout and button components. */ private void initControls() < if(linearLayout == null) < linearLayout = (LinearLayout)findViewById(R.id.button_layout); >if(button1 == null) < button1 = (Button)findViewById(R.id.button_1); >if(button2 == null) < button2 = (Button)findViewById(R.id.button_2); >if(context == null) < context = getApplicationContext(); >/* Must set the on click listener to this activity, otherwise the override onClick method will bot be invoked.*/ linearLayout.setOnClickListener(this); button1.setOnClickListener(this); button2.setOnClickListener(this); > /* This method is called when any of the activity's view components is clicked. */ @Override public void onClick(View view) < if(view != null) < String message = ""; // Get view component id. int // Show different message when click different view component. if(id == R.id.button_1) < message = "Button one is clicked."; >else if(id == R.id.button_2) < message = "Button two is clicked."; >else if(id == R.id.button_layout) < message = "You clicked button layout."; >// Create the toast popup message. Toast toast = Toast.makeText(context, message, Toast.LENGTH_SHORT); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); > > >

3.2 Main Activity Layout Xml File.

  1. Two buttons are wrapped by the LinearLayout view object.
  2. activity_button.xml
Читайте также:  Python print with parentheses

Источник

Урок 9. Обработчики событий на примере Button.

В layout-файл main.xml напишем следующее и сохраним:

У нас есть TextView с текстом и две кнопки: OK и Cancel. Мы сделаем так, чтобы по нажатию кнопки менялось содержимое TextView. По нажатию кнопки OK – будем выводить текст: «Нажата кнопка ОК», по нажатию Cancel – «Нажата кнопка Cancel».

Открываем MainActivity.java. Описание объектов вынесем за пределы метода onCreate. Это сделано для того, чтобы мы могли из любого метода обращаться к ним. В onCreate мы эти объекты заполним с помощью уже пройденного нами метода findViewById. В итоге должен получиться такой код:

public class MainActivity extends Activity < TextView tvOut; Button btnOk; Button btnCancel; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.main); // найдем View-элементы tvOut = (TextView) findViewById(R.id.tvOut); btnOk = (Button) findViewById(R.id.btnOk); btnCancel = (Button) findViewById(R.id.btnCancel); >>

Обновляем секцию import (CTRL+SHIFT+O). Объекты tvOut, btnOk и btnCancel соответствуют View-элементам экрана и мы можем с ними работать. Нам надо научить кнопку реагировать на нажатие. Для этого у кнопки есть метод setOnClickListener (View.OnClickListener l). На вход подается объект с интерфейсом View.OnClickListener. Именно этому объекту кнопка поручит обрабатывать нажатия. Давайте создадим такой объект. Код продолжаем писать в onCreate:

OnClickListener oclBtnOk = new OnClickListener() < @Override public void onClick(View v) < // TODO Auto-generated method stub >>;

Eclipse подчеркивает OnClickListener красной линией

т.к. пока не знает его. Необходимо обновить секцию import. Жмем CTRL+SHIFT+O, Eclipse показывает нам, что он знает два интерфейса с именем onClickListener и предлагает выбрать. Нам нужен View.OnClickListener, т.к. метод кнопки setOnClickListener принимает на вход именно его.

Итак, мы создали объект oclBtnOk, который реализует интерфейс View.OnClickListener. Объект содержит метод onClick – это как раз то, что нам нужно. Именно этот метод будет вызван при нажатии кнопки. Мы решили, что по нажатию будем выводить текст: «Нажата кнопка ОК» в TextView (tvOut). Реализуем это.

tvOut.setText("Нажата кнопка ОК");

Обработчик нажатия готов. Осталось «скормить» его кнопке с помощью метода setOnClickListener.

btnOk.setOnClickListener(oclBtnOk);

В итоге должен получится такой код:

public class MainActivity extends Activity < TextView tvOut; Button btnOk; Button btnCancel; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.main); // найдем View-элементы tvOut = (TextView) findViewById(R.id.tvOut); btnOk = (Button) findViewById(R.id.btnOk); btnCancel = (Button) findViewById(R.id.btnCancel); // создаем обработчик нажатия OnClickListener oclBtnOk = new OnClickListener() < @Override public void onClick(View v) < // Меняем текст в TextView (tvOut) tvOut.setText("Нажата кнопка ОК"); >>; // присвоим обработчик кнопке OK (btnOk) btnOk.setOnClickListener(oclBtnOk); > >

Все сохраняем и запускаем. Жмем на кнопку ОК и видим. Что текст изменился

Нажатие на Cancel пока ни к чему не приводит, т.к. для нее мы обработчик не создали и не присвоили. Давайте сделаем это аналогично, как для кнопки OK. Сначала мы создаем обработчик:

OnClickListener oclBtnCancel = new OnClickListener() < @Override public void onClick(View v) < // Меняем текст в TextView (tvOut) tvOut.setText("Нажата кнопка Cancel"); >>;

Потом присваиваем его кнопке:

btnCancel.setOnClickListener(oclBtnCancel);

Сохраняем, запускаем, проверяем. Обе кнопки теперь умеют обрабатывать нажатия.

Давайте еще раз проговорим механизм обработки событий на примере нажатия кнопки. Сама кнопка обрабатывать нажатия не умеет, ей нужен обработчик (его также называют слушателем — listener), который присваивается с помощью метода setOnClickListener. Когда на кнопку нажимают, обработчик реагирует и выполняет код из метода onClick. Это можно изобразить так:

Соответственно для реализации необходимо выполнить следующие шаги:

— создаем обработчик
— заполняем метод onClick
— присваиваем обработчик кнопке

и система обработки событий готова.

— научимся использовать один обработчик для нескольких View-элементов
— научим Activity выступать в качестве обработчика

Присоединяйтесь к нам в Telegram:

— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.

— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Compose, Kotlin, RxJava, Dagger, Тестирование, Performance

— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня

Источник

Простой щелчок кнопки

Совсем недавно я написал пост, в котором выражал свое желание перейти от разработки для Windows Phone 7 к программированию под Android. К сожалению, некие внешние обстоятельства затормозили этот процесс и изучение идет не такими быстрыми темпами как хотелось бы. Но тем не менее желания не убавилось и скоро смогу уделить больше времени для Android.
А сегодня хочу рассказать о такой заурядной вещи, как обработка щелчка кнопки. Статья предназначена для новичков и будет говорить об очевидных вещах, но мне она стоила одной ночи.

Небольшое отступление

Когда я загорелся желанием изучить программирование под Android, то через поисковый запрос Google попытался получить список русскоязычных сайтов, где имелись руководства для Android. В принципе, документация на английском меня не пугает, но хотелось быстрее вникнуть в особенности программирования. Но обилие новых терминов и понятий на первых порах могли затруднить такое понимание, читая документацию в оригинале. Я честно открыл около двадцати различных ссылок и результат меня разочаровал. Практически везде в качестве руководства предлагалось только две статьи: установка необходимого программного обеспечения и перевод статьи Hello, World с официального сайта developer.android.com. Такое впечатление, что все дружно скопипастили из одного источника, добавили несколько статей из Хабра и все. Буду рад, если кто-то подскажет мне хороший ресурс для совсем начинающих — в идеале статьи должны быть написаны для людей, которые были вообще не знакомы с программированием до знакомства с Android.
Переходим к кнопке. После написания традиционного Hello, World, который выводился в TextView сразу после загрузки приложения, захотелось попробовать что-то более функциональное. Разобравшись с основными принципами размещения элементов в xml-файле, решил переписать Hello, World на более привычный манер. Добавил на форму текстовое поле EditText и кнопку Button, и стал искать в документации способ обработки щелчка. В документации (а также в статьях на Хабре) использовалась такая длинная конструкция:

// Create an anonymous implementation of OnClickListener private OnClickListener mCorkyListener = new OnClickListener() < public void onClick(View v) < // do something when the button is clicked >>; protected void onCreate(Bundle savedValues) < . // Capture our button from layout Button button = (Button)findViewById(R.id.corky); // Register the onClick listener with the implementation above button.setOnClickListener(mCorkyListener); . >

То ли сказался поздний час, то ли общая усталость, но моя голова отказывалась запоминать эту конструкцию. Возможно для java-разработчиков это стандартная процедура, не вызывающая затруднений, но не для меня.
И тут, перечитывая примеры на Хабре, неожиданно наткнулся на один комментарий, где говорилось, что под Android 2.x можно использовать другую конструкцию. Спасибо, добрый человек! Его ремарка спасла меня. Все можно сделать гораздо проще.
Открываем файл main.xml и ищем тег . Добавляем к нему еще одну строчку:

Таким образом мы определили событие onClick для кнопки (щелчок) и теперь нам осталось написать обработчик события. Открываем файл HelloWorld.java и пишем сразу после события onCreate:

public void butHello_Click(View v)

Обратите внимание, что имя метода butHello_Click должно совпадать со строкой, которую мы задали в атрибуте android:onClick для кнопки, а также добавляем скобки с текстом View v. В фигурных скобках пишем код, который должен выполниться при щелчке кнопки. Так как нам надо вывести текст в текстовом поле, то просто присваиваем нужный текст через метод setText.

Полный текст кода для HelloWorld.java будет выглядеть следующим образом.

package com.example.helloworld; import android.app.Activity; import android.os.Bundle; import android.widget.EditText; import android.view.View; public class HelloWorld extends Activity < private EditText edtext; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.main); edtext = (EditText)findViewById(R.id.editText1); >public void butHello_Click(View v) < edtext.setText("Здравствуй, друг"); >> 

После такого открытия у меня свалилась гора с плеч. Во-первых, такой код выглядит проще и понятнее для меня. Во-вторых он практически идентичен коду для Windows Phone 7. Сравните код на XAML для кнопки.
Name=»butHello»
Click=»butHello_Click»/>

Щелчок кнопки

Подобный подход в будущем поможет упростить портирование программ на разные платформы. К сожалению, почему то такой способ обработки щелчка кнопки редко встречается в примерах. Не знаю, что тому причиной, но мой взгляд, если Google добавила этот способ для новых версий Android, то им нужно активнее пользоваться.
В заключение приведу свою страничку, где выкладываю свои первые опыты в области разработки под Android — developer.alexanderklimov.ru/android. И напоминаю свою просьбу — подскажите хорошие русскоязычные ресурсы для совсем начинающих по основам разработки под Android.

Источник

Оцените статью