Androidアプリ開発

DatePickerをDialogFragmentで実装する

この記事は約11分で読めます。
スポンサーリンク

こんにちは、まっさん(@Tera_Msaki)です。

この記事は Androidスマホ用のアプリ開発の中で、
今後の開発で再使用性が高いと思われるコーディングをまとめたものです。
Java での開発経験、XML構文規則、Android のアプリ開発経験がある方を対象としています。
Android のアプリ開発でお役にたててれば、嬉しいです。
(これから Android のアプリ開発や Java での開発を始めたい方への案内は、記事の最後で紹介します)

この記事のテーマ


 日付入力をDatePickerDialogで実装する

下記の動画は、
お買い物リストアプリ(
Strocker)のストック入力画面で
ストック確認日を指定している動画です。
日付をタップするとことで、
DatePickerDialog を表示して、日付を指定します。

DatePickerDialog

◎ポイント
日付指定を DatePickerDialog で実装する際、
設定した日付を受け取るには、
少し工夫が必要です。

◎DatePickerDialogに指定した日付をハンドリングする
DatePickerDialog の OnDateSetListener をもつ、
DialogFragment を継承したクラスを作成します。
DatePickerDialog に初期表示する日付の引渡し、
DatePickerDialog で設定した日付を返却するインタフェースを実装します。

public class DialogDatePicker
        extends DialogFragment
        implements DatePickerDialog.OnDateSetListener {
    public static SimpleDateFormat  simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd", Locale.US);
    private final Context           context;
    private OnSelectedDateListener  onSelectedDateListener;
    // インタフェース //
    public interface OnSelectedDateListener {
        void selected(Integer year, Integer month, Integer day);
    }
    // コンテキスト //
    public DialogDatePicker(Context context) {
        this.context = context;
    }
    // リスナー設定 //
    public void setOnSelectedDateListener(DialogDatePicker.OnSelectedDateListener onSelectedDateListener){
        this.onSelectedDateListener = (OnSelectedDateListener) onSelectedDateListener;
    }
    // Date変換 //
    public static Date toDate(String ymd) {
        Date toDate = null;
        try {
            toDate = simpleDateFormat.parse(ymd);
        } catch (java.text.ParseException e) {
            e.printStackTrace();
            toDate = new Date();
        }
        return toDate;
    }
    @Override
    @NonNull
    public DatePickerDialog onCreateDialog(Bundle savedInstanceState) {
        String ymd = requireArguments().getString("DATE");
        final Calendar calendar = Calendar.getInstance();
        calendar.setTime(toDate(ymd));
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        return new DatePickerDialog (context,
                this,
                year, month, day);
    }
    @Override
    public void onDateSet(android.widget.DatePicker view, int year, int month, int day) {
        onSelectedDateListener.selected(year, month + 1, day);
    }
}

DatePickerDialog で設定した日付の月( month )は、
0~11の範囲で返却されます。
このため、DatePickerDialog の戻り値( month )に
1 加えた値をインタフェースにセットします。

日付入力をDatePickerDialogで実装する
Fragment に先ほどの DialogDatePicker のインタフェースをインプリメントします。
TextView( procDate)のタップで DataPicker を表示し、
DataPicker で指定した日付を TextView にセットします。
DataPicker で指定した日付は、
DialogDatePicker のインタフェース経由( selected )で受け取ります。

public class StockFragment
        extends StockerUtilities
        implements Keyboard.OnVisibilityListener, DialogDatePicker.OnSelectedDateListener {
	:

    private final SimpleDateFormat simpleDateFormat = new android.icu.text.SimpleDateFormat("yyyy/MM/dd", Locale.US);
	:

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.fragment_stock, container, false);
	:

        procDate = view.findViewById(R.id.procDate);
        procDate.setOnClickListener(v -> {
            DialogDatePicker dialogDatePicker = new DialogDatePicker(getActivity());
            Bundle bundle = new Bundle();
            bundle.putString("DATE", procDate.getText().toString());
            dialogDatePicker.setOnSelectedDateListener((year, month, day) -> {
                procDate.setText(HtmlCompat.fromHtml(String.format(Locale.US, "<u>%d/%d/%d</u>", year, month, day), FROM_HTML_MODE_COMPACT));
            });
            dialogDatePicker.setArguments(bundle);
            dialogDatePicker.show(getParentFragmentManager() ,context.getString(R.string.stock_procDate));
        });
	:

        return view;
}

今回は、ここまでです。

ゲームのボイスチャットから、Web会議までOKです♪
ヘッドセットは絶対に無線がいいです♪

誤字脱字、意味不明でわかりづらい、
もっと詳しく知りたいなどのご意見は、
このページの最後にある
コメントか、
こちら
から、お願いいたします♪

ポチッとして頂けると、
次のコンテンツを作成する励みになります♪

ブログランキング・にほんブログ村へ

◎これからAndroidのアプリ開発やJavaでの開発を始めたい方へ

初めての Android のアプリ開発では、アプリケーション開発経験がない方や、
アプリケーション開発経験がある方でも、Java や C# などのオブジェクト指向言語が初めての方は、
書籍などによる独学ではアプリ開発できるようになるには、
かなりの時間がかかりますので、オンラインスクールでの習得をおススメします。

未経験者からシステムエンジニアを目指すのに最適かと、
まずは無料相談から♪

無料でJava言語を学べるのは、かなり魅力的♪
でも、応募資格は35歳以下です

未経験者からプログラマーを目指すのに最適かと、
まずは無料カウンセリングから♪

カリキュラムとサポートがしっかりしています、
お得なキャンペーンとかいろいろやっています♪

ゲーム系に強いスクール、UnityやUnrealEngineを習得するのに最適かと、
まずは無料オンライン相談から♪

コメント欄

タイトルとURLをコピーしました