CodeZine(コードジン)

特集ページ一覧

Androidアプリ処理の基本 ~ イベントとリスナ

Android Studio 2で始めるアプリ開発入門 第5回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2016/06/13 14:00
目次

ボタン2個の処理

 それでは、ボタンが複数存在する場合の処理について説明していきましょう。

 まずは、上記サンプルにボタンをひとつ追加します。strings.xmlファイルの<string name="bt_click">タグの直下、および、activity_hello_sample.xmlファイルの<Button>タグと<TextView>タグの間に以下のソースコードを追記してください。

リスト7 strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
      ~省略~
    <string name="bt_clear">クリア</string>

</resources>
リスト8 activity_hello_sample.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      ~省略~
        android:text="@string/bt_click"/>

    <Button
        android:id="@+id/btClear"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/bt_clear"/>

    <TextView
      ~省略~

</LinearLayout>

 この状態で、アプリを起動しなおしてみてください。以下のように「クリア」ボタンが追加された画面になっています。

図5 「クリア」ボタンが追加された画面
図5 「クリア」ボタンが追加された画面

 このクリアボタンをタップすると、EditTextに入力した文字列、およびTextViewに表示された文字列がクリアされるように処理を記述しますが、上述の手順に則って、リスナを新規に作成しても構いません。しかし、ここでは同一リスナクラスを使用し、onClick()メソッド内でどのボタンをタップしたかを判定し、それに応じて処理を分岐させる方法を取ります。

 まず、「クリア」ボタンにリスナを設定します。onCreate()メソッド内に以下のソースコードを追記してください。

リスト9 リスナ設定
public class HelloSampleActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
      ~省略~

        Button btClear = (Button) findViewById(R.id.btClear);
        btClear.setOnClickListener(listener);
    }
      ~省略~
}

 このように、ボタンオブジェクトbtClickに設定した同じリスナオブジェクトlistenerを設定します。

 次に、リスナクラス内のonClick()メソッドを以下のように書き換えます。

リスト10 onClick()の書き換え
public class HelloSampleActivity extends AppCompatActivity {
      ~省略~

        @Override
        public void onClick(View view) {
            EditText input = (EditText) findViewById(R.id.etName); // (10)
            TextView output = (TextView) findViewById(R.id.tvOutput); // (10)

            int id = view.getId(); // (11)
            switch(id) {
                case R.id.btClick:
                    String inputStr = input.getText().toString();
                    output.setText(inputStr + "さん、こんにちは!");
                    break;
                case R.id.btClear:
                    input.setText("");
                    output.setText("");
                    break;
            }
        }
    }
}

 onClick()メソッドの引数viewはタップされた画面部品を表します。(11)のように、このviewのメソッドgetId()を使えば、その画面部品のR値を取得できます。このR値がどのボタンを表すか、switch文を使えば簡単に分岐できます。この方式の利点は(10)のように、各ボタンで共通の処理がある場合にソースコードの重複を防ぐことができることです。

 ソースコードの追記が終了したら、アプリを起動しなおし、クリアボタンが動作するか確認してください。

まとめ

 今回は、Androidアプリでのアクティビティへの記述方法、特に、イベントとリスナについて解説してきました。次回はこの続きとして、ListViewのイベントとリスナについて解説していきます。



  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:Android Studio 2で始めるアプリ開発入門

もっと読む

著者プロフィール

  • WINGSプロジェクト 齊藤 新三(サイトウ シンゾウ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きた...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

あなたにオススメ

All contents copyright © 2005-2022 Shoeisha Co., Ltd. All rights reserved. ver.1.5