11package mil .nga .giat .mage .observation ;
22
3- import android .content .Context ;
43import android .os .Build ;
54import android .os .Bundle ;
65import android .support .annotation .Nullable ;
1110import android .support .v4 .app .FragmentPagerAdapter ;
1211import android .support .v4 .view .PagerAdapter ;
1312import android .support .v4 .view .ViewPager ;
14- import android .support .v7 .view .ContextThemeWrapper ;
1513import android .view .LayoutInflater ;
1614import android .view .View ;
1715import android .view .ViewGroup ;
1816import android .widget .DatePicker ;
1917import android .widget .TimePicker ;
2018
2119import java .text .DateFormat ;
22- import java .text .SimpleDateFormat ;
23- import java .util .ArrayList ;
20+ import java .util .Arrays ;
2421import java .util .Calendar ;
2522import java .util .Date ;
2623import java .util .List ;
27- import java .util .TimeZone ;
2824
2925import mil .nga .giat .mage .R ;
3026import mil .nga .giat .mage .utils .DateFormatFactory ;
@@ -39,13 +35,17 @@ public interface OnDateTimeChangedListener {
3935 void onDateTimeChanged (Date date );
4036 }
4137
38+ private static final String CALENDAR_INSTANCE = "CALENDAR" ;
4239 private static final String DATE_TIME_EXTRA ="DATE_TIME_EXTRA" ;
4340
4441 private Calendar calendar = Calendar .getInstance ();
4542
4643 private DateFormat dateFormat ;
4744 private DateFormat timeFormat ;
4845
46+ DatePickerFragment datePickerFragment ;
47+ TimePickerFragment timePickerFragment ;
48+
4949 private OnDateTimeChangedListener onDateTimeChangedListener ;
5050
5151 public static DateTimePickerDialog newInstance (Date date ) {
@@ -73,12 +73,30 @@ public void onCreate(@Nullable Bundle savedInstanceState) {
7373 calendar .setTime (date );
7474 }
7575
76+ @ Override
77+ public void onSaveInstanceState (Bundle outState ) {
78+ super .onSaveInstanceState (outState );
79+
80+ outState .putSerializable (CALENDAR_INSTANCE , calendar );
81+
82+ FragmentManager manager = getChildFragmentManager ();
83+ manager .putFragment (outState , DatePickerFragment .class .getName (), datePickerFragment );
84+ manager .putFragment (outState , TimePickerFragment .class .getName (), timePickerFragment );
85+ }
86+
7687 @ Override
7788 public View onCreateView (LayoutInflater inflater , ViewGroup container , Bundle savedInstanceState ) {
78- final Context contextThemeWrapper = new ContextThemeWrapper (getActivity (), R .style .AppTheme_PrimaryAccent );
7989 LayoutInflater localInflater = inflater .cloneInContext (getContext ());
8090 View view = localInflater .inflate (R .layout .date_time_dialog , container , false );
8191
92+ if (savedInstanceState != null ) {
93+ calendar = (Calendar ) savedInstanceState .getSerializable (CALENDAR_INSTANCE );
94+
95+ FragmentManager manager = getChildFragmentManager ();
96+ datePickerFragment = (DatePickerFragment ) manager .getFragment (savedInstanceState , DatePickerFragment .class .getName ());
97+ timePickerFragment = (TimePickerFragment ) manager .getFragment (savedInstanceState , TimePickerFragment .class .getName ());
98+ }
99+
82100 final TabLayout tabLayout = (TabLayout ) view .findViewById (R .id .tab_layout );
83101 tabLayout .setTabGravity (TabLayout .GRAVITY_FILL );
84102 tabLayout .setTabMode (TabLayout .MODE_FIXED );
@@ -91,9 +109,9 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
91109
92110 final ViewPager viewPager = (ViewPager ) view .findViewById (R .id .pager );
93111
94- List < Fragment > fragments = new ArrayList <>();
95- DatePickerFragment datePickerFragment = DatePickerFragment .newInstance (calendar .getTime ());
96- fragments . add ( datePickerFragment );
112+ if ( datePickerFragment == null ) {
113+ datePickerFragment = DatePickerFragment .newInstance (calendar .getTime ());
114+ }
97115 datePickerFragment .setOnDateChangedListener (new DatePicker .OnDateChangedListener () {
98116 @ Override
99117 public void onDateChanged (DatePicker view , int year , int monthOfYear , int dayOfMonth ) {
@@ -105,8 +123,9 @@ public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfM
105123 }
106124 });
107125
108- TimePickerFragment timePickerFragment = TimePickerFragment .newInstance (calendar .getTime ());
109- fragments .add (timePickerFragment );
126+ if (timePickerFragment == null ) {
127+ timePickerFragment = TimePickerFragment .newInstance (calendar .getTime ());
128+ }
110129 timePickerFragment .setOnTimeChangedListener (new TimePicker .OnTimeChangedListener () {
111130 @ Override
112131 public void onTimeChanged (TimePicker view , int hourOfDay , int minute ) {
@@ -117,7 +136,8 @@ public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
117136 }
118137 });
119138
120- PagerAdapter adapter = new DateTimePagerAdapter (getChildFragmentManager (), fragments );
139+
140+ PagerAdapter adapter = new DateTimePagerAdapter (getChildFragmentManager (), Arrays .asList (new Fragment [] {datePickerFragment , timePickerFragment }));
121141 viewPager .setAdapter (adapter );
122142 viewPager .addOnPageChangeListener (new TabLayout .TabLayoutOnPageChangeListener (tabLayout ));
123143
@@ -186,7 +206,6 @@ public void onCreate(@Nullable Bundle savedInstanceState) {
186206 }
187207
188208 calendar .setTimeZone (DateFormatFactory .getTimeZone (getContext ()));
189-
190209 calendar .setTime (date );
191210 }
192211
0 commit comments