0
アプリ内の地図は、データの日付に部分的に依存するオーバーレイを使用します。デフォルトでは、現在の日付のデータを表示し、日付をタップして日付ピッカーを表示できます。これまでのところ動作していますが、日付ピッカーを動作させるための唯一の方法は、MainActivity
内にstatic class
を作成して、外部クラスのものにアクセスできないため、getMapAsync
を使用できません。ユーザーが一度日付を選択すると、アプリはどのようにOnMapReady
を使用できますか?Android/Java - datepickerでmapfragmentを更新するには?
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener, OnMapReadyCallback, OnDateSetListener{
static Calendar calendar = Calendar.getInstance();
static SimpleDateFormat sysFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.US);
static String sysDate = sysFormat.format(calendar.getTime());
static DateFormat userFormat = (DateFormat.getDateInstance());
static String userDate = userFormat.format(calendar.getTime());
...
@Override
protected void onCreate(Bundle savedInstanceState) {
TextView displayDate = (TextView)findViewById(R.id.displayDate);
displayDate.setText(userDate);
displayDate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DialogFragment datePicker = new DatePickerFragment();
datePicker.show(getSupportFragmentManager(), "datePicker");
}
});
}
...
@Override
public void onMapReady(GoogleMap googleMap) {
//sysDate used in overlay link
}
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
//if possible I would like this to be called rather than the one below
}
public static class DatePickerFragment extends DialogFragment implements OnDateSetListener{
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
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);
// Create a new instance of DatePickerDialog and return it
return new DatePickerDialog(getActivity(), this, year, month, day);
}
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
calendar.set(Calendar.YEAR,year);
calendar.set(Calendar.MONTH,monthOfYear);
calendar.set(Calendar.DAY_OF_MONTH,dayOfMonth);
userDate = userFormat.format(calendar.getTime());
sysDate = sysFormat.format(calendar.getTime());
}
}
}