2016-04-09 2 views
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()); 

     } 
    } 
} 

答えて

0

解決済み、私は愚かです。マップ

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(); 
    } 
を使用してそれを呼ばれるメイド

関連する問題