SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

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

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

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


  • X ポスト
  • このエントリーをはてなブックマークに追加

ボタン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のイベントとリスナについて解説していきます。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Android Studio 2で始めるアプリ開発入門連載記事一覧

もっと読む

この記事の著者

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

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook <個人紹介>WINGSプロジェクト所属のテクニカルライター。Web系製作会社のシステム部門、SI会社を経てフリーランスとして独立。屋号はSarva(サルヴァ)。HAL大阪の非常勤講師を兼務。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/9452 2018/05/23 15:36

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング