Pull to refresh

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

Reading time 4 min
Views 82K
Совсем недавно я написал пост, в котором выражал свое желание перейти от разработки для 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 и ищем тег <Button>. Добавляем к нему еще одну строчку:

<Button android:layout_height="wrap_content" 
    android:id="@+id/butHello" 
    android:layout_width="wrap_content" 
    android:text="Поздороваться" 
    android:onClick="butHello_Click"></Button>


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

public void butHello_Click(View v){
    edtext.setText("Здравствуй, друг");
}


Обратите внимание, что имя метода 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 для кнопки.
<Button Content="Button" Height="71" Width="160"
Name="butHello"
Click="butHello_Click"/>


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

Подобный подход в будущем поможет упростить портирование программ на разные платформы. К сожалению, почему то такой способ обработки щелчка кнопки редко встречается в примерах. Не знаю, что тому причиной, но мой взгляд, если Google добавила этот способ для новых версий Android, то им нужно активнее пользоваться.
В заключение приведу свою страничку, где выкладываю свои первые опыты в области разработки под Android — developer.alexanderklimov.ru/android. И напоминаю свою просьбу — подскажите хорошие русскоязычные ресурсы для совсем начинающих по основам разработки под Android.
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
+29
Comments 55
Comments Comments 55

Articles