こんにちは、まっさん(@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#などのオブジェクト指向言語が初めての方は、
書籍などによる独学ではアプリ開発できるようになるには、
かなりの時間がかかりますので、オンラインスクールでの習得をおススメします。



コメント