Android/Java - 如何使用日期选择器更新 mapfragment?

Android/Java - How to update mapfragment with datepicker?

应用程序中的地图使用部分取决于数据日期的叠加层,默认情况下我希望它显示当前日期的数据,并且用户可以点击日期以调出日期选择器。到目前为止这是有效的,但由于我设法让日期选择器工作的唯一方法是在 MainActivity 中创建一个 static class 它无法访问外部 class 中的任何内容,因此不能使用 getMapAsync。用户选择日期后,应用程序如何使用 OnMapReady

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());

       }
   }
}

解决了,感觉很傻。

制作了重新加载地图的方法

public void reloadMap(){
    SupportMapFragment supportMapFragment = (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);
    supportMapFragment.getMapAsync(this);
}

然后使用 getActivity()

调用它
    public static class DatePickerFragment extends DialogFragment implements OnDateSetListener{

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {...}


   @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());
        TextView displayDate = (TextView)getActivity().findViewById(R.id.displayDate);
        displayDate.setText(userDate);
        ((MainActivity)getActivity()).reloadMap();
    }