#DatePickerDialogを使ってみた
DatePickerDialogはフラグメントの一種で、写真のような日付選択ツールが使えるようになるらしい。
フラグメントについてわからなかったので調べてみると、
フラグメントを作成するには、Fragment(またはその既存のサブクラス)のサブクラスを作成する必要があります。
(フラグメントを作成する (Android Developers))
とあったので、ほほーそうかと思ってDatePickerDialogのクラスを作ってみた。
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.widget.DatePicker;
import androidx.fragment.app.DialogFragment;
import java.util.Calendar;
public class DatePickerDialogFragment extends DialogFragment{
@Override
public Dialog onCreateDialog(Bundle savedInstantState){
//デフォルトのタイムゾーンおよびロケールを使用してカレンダを取得
final Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), (DatePickerDialog.OnDateSetListener)getActivity(), year, month, day); //this はonDateSetListener
return datePickerDialog;
}
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import java.util.Calendar;
public class TestDatePickerActivity extends AppCompatActivity implements View.OnClickListener, DatePickerDialog.OnDateSetListener{
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
textView = findViewById(R.id.textViewTest);
textView.setOnClickListener(this);
//今日の日付をtextViewにセット
Calendar c = Calendar.getInstance();
textView.setText(String.format("%d年%d月%d日", c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)));
}
@Override
public void onClick(View view) {
//DatePickerFragmentを表示
DatePickerDialogFragment datePicker = new DatePickerDialogFragment();
datePicker.show(getSupportFragmentManager(), "datePicker");
}
//DatePickerFragment で日付がセットされたときにtextViewに取得した日付を代入する
@Override
public void onDateSet(DatePicker datePicker, int year, int month, int dayOfMonth) {
textView.setText(String.format("%d年%d月%d日", year, month + 1, dayOfMonth));
}
TestDatePickerActivity には今日の日付が出てきて、テキストをクリックすると先ほどのDatePickerDialogFragmentが呼び出されて日付選択ツールが出てくる。
ここで、DatePickerDialogFragmentクラスにOnDateSetメソッドを書いた場合、どのような記述をすれば選択した日付をtestDatePickerActivityに表示できるのかわからなかった。onDateSetメソッドをtestDatePickerActivityで継承したらなんとかできたのでよかったねというお話でした。
####ちなみに…
こちらのサイトなどだと一つのクラスにまとめて書いてある。(https://codinginflow.com/tutorials/android/datepickerdialog)
サブクラスをあえて作る必要はないけれど、読みにくいのでクラスを分けた方がきれいに見えると思う。