Android
 Computer >> コンピューター >  >> プログラミング >> Android

【Android】DatePickerのOnDateChangedListenerで日付変更イベントを検知する方法

はじめに:DatePickerとは

Androidアプリ開発では、ユーザーに誕生日や予約日などの日付を選択してもらう場面が多くあります。そんなときに活躍するのが「DatePicker」です。

DatePickerはFrameLayoutのサブクラスとして実装されたウィジェットで、「日」「月」「年」を直感的に選択できるUIコンポーネントです。本記事では、DatePickerにOnDateChangedListenerを設定し、ユーザーが日付を変更したタイミングを検知する方法を、実際のコード例とともに解説します。

手順1:新規プロジェクトを作成する

まずはAndroid Studioで新しいプロジェクトを作成しましょう。メニューバーから「File → New Project」を選択し、必要な項目を入力してプロジェクトを作成します。

手順2:レイアウトファイル(activity_main.xml)を編集する

次に、res/layout/activity_main.xmlに以下のコードを追加します。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
    <DatePicker
        android:id="@+id/datePicker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="36dp" />
</RelativeLayout>

このコードでは、RelativeLayoutの中にDatePickerを配置し、画面中央(水平方向)に表示するよう設定しています。ユーザーが日付を選択すると、その内容がトースト(Toast)メッセージとして画面下部に表示される仕組みです。

手順3:MainActivity.javaにリスナーを実装する

続いて、src/MainActivity.javaに以下のコードを記述します。

package com.example.andy.myapplication;
import android.annotation.TargetApi;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.DatePicker;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
    @TargetApi(Build.VERSION_CODES.O)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        DatePicker datePicker = findViewById(R.id.datePicker);
        datePicker.setOnDateChangedListener(new DatePicker.OnDateChangedListener() {
            @Override
            public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                Toast.makeText(MainActivity.this," You are changed date is : "+dayOfMonth +" -  "+monthOfYear+ " - "+year,Toast.LENGTH_LONG).show();
            }
        });
}
}

ポイントはsetOnDateChangedListener()メソッドです。このメソッドでOnDateChangedListenerを登録すると、ユーザーがスピナーで日・月・年のいずれかを変更した瞬間にonDateChanged()コールバックが呼び出されます。サンプルでは、変更後の値を「日 - 月 - 年」の形式で組み立て、Toast.LENGTH_LONGでトースト表示しています。

注意点:monthOfYearは0始まり

onDateChanged()の第2引数「monthOfYear」は0〜11の値で渡されるため、1月が「0」となります。人間が読める形式で表示したい場合は「monthOfYear + 1」とするか、Calendarクラスなどで変換することをおすすめします。

手順4:Manifestファイルの変更は不要

今回の実装には、インターネット通信や特殊なハードウェアへのアクセスが含まれないため、AndroidManifest.xmlに権限の追加などは一切不要です。

アプリを実行して動作を確認する

それでは実際にアプリを起動してみましょう。Android端末をパソコンにUSB接続し、Android Studioのツールバーにある「Run」アイコンをクリックします。

【Android】DatePickerのOnDateChangedListenerで日付変更イベントを検知する方法

デバイス選択ダイアログが表示されたら、接続済みのスマートフォンを選択して実行してください。端末側には以下のようなDatePickerの初期画面が表示されます。

【Android】DatePickerのOnDateChangedListenerで日付変更イベントを検知する方法

スピナーを回して日付を変更すると、変更後の年月日が即座にトーストメッセージで通知されます。

【Android】DatePickerのOnDateChangedListenerで日付変更イベントを検知する方法

まとめ

DatePickerにsetOnDateChangedListener()を設定すれば、ユーザーによる日付変更をリアルタイムに検知できることが確認できました。この仕組みは、カレンダーアプリ、予約管理システム、スケジュール登録機能など、日付入力を扱うあらゆる場面で応用できます。ぜひ自身のプロジェクトでも試してみてください。

  1. 【Android開発入門】日時ピッカー(DatePicker/TimePicker)の使い方を徹底解説

    この記事では、AndroidアプリでDatePickerDialogとTimePickerDialogを使用して、ユーザーに日付と時刻を選択させる方法を、サンプルコードとともにステップ形式でわかりやすく解説します。ボタンをタップするとまず日付選択ダイアログが表示され、その後に時刻選択ダイアログへと連続的に遷移する、実用的な実装例です。 ステップ1:新規プロジェクトの作成 まずはAndroid Studioで新しいプロジェクトを作成しましょう。メニューからFile → New Projectを選択し、必要な項目をすべて入力してプロジェクトを作成してください。 ステップ2:レイアウトファイル(

  2. 【Android】NavigationViewの実装方法をステップごとに解説

    この記事では、AndroidアプリでNavigationView(ナビゲーションビュー)を使用してドロワーメニューを実装する方法を、ステップごとに詳しく解説します。ハンバーガーアイコンから開閉できるサイドメニューは、多くのアプリで採用されている定番のUIです。ステップ1:新しいプロジェクトを作成するAndroid Studioを開き、File → New Project を選択して、必要な情報を入力し新しいプロジェクトを作成します。テンプレートには「Navigation Drawer Activity」を選ぶと、後の作業がスムーズになります。ステップ2:activity_main.xml にコ