Androidアプリ開発

DatePickerをDialogFragmentで実装する

Androidアプリ開発
この記事は約10分で読めます。

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

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

◎テーマ
Androidスマホのアプリ開発で日付入力をDatePickerDialogで実装する

◎ポイント

Androidスマホのアプリ開発で日付指定を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;
}

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

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

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

コメント

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