diff options
| author | James Kung <kingkung@google.com> | 2013-04-18 21:57:23 -0700 |
|---|---|---|
| committer | Android Git Automerger <android-git-automerger@android.com> | 2013-04-18 21:57:23 -0700 |
| commit | b32c6bd57c2575240f751d68e91921a2241e968c (patch) | |
| tree | 6b39b2285c6ebb386bd3a6da4f1d41bccbf58be2 | |
| parent | e21d071895adeee425ed8f320df5f9e63b428a6d (diff) | |
| parent | 9884d4cda847b494c8174ec96b0014fa40032d95 (diff) | |
am 9884d4cd: Merge "Fix null pointer exception in year picker Retain year picker position offset on orientation change" into jb-mr2-dev
* commit '9884d4cda847b494c8174ec96b0014fa40032d95':
Fix null pointer exception in year picker Retain year picker position offset on orientation change
| -rw-r--r-- | src/com/android/datetimepicker/date/DatePickerDialog.java | 6 | ||||
| -rw-r--r-- | src/com/android/datetimepicker/date/YearPickerView.java | 45 |
2 files changed, 30 insertions, 21 deletions
diff --git a/src/com/android/datetimepicker/date/DatePickerDialog.java b/src/com/android/datetimepicker/date/DatePickerDialog.java index 77bedbf..8954c35 100644 --- a/src/com/android/datetimepicker/date/DatePickerDialog.java +++ b/src/com/android/datetimepicker/date/DatePickerDialog.java @@ -67,6 +67,7 @@ public class DatePickerDialog extends DialogFragment implements private static final String KEY_YEAR_START = "year_start"; private static final String KEY_YEAR_END = "year_end"; private static final String KEY_CURRENT_VIEW = "current_view"; + private static final String KEY_LIST_POSITION_OFFSET = "list_position_offset"; private static final int DEFAULT_START_YEAR = 1900; private static final int DEFAULT_END_YEAR = 2100; @@ -181,6 +182,7 @@ public class DatePickerDialog extends DialogFragment implements listPosition = mDayPickerView.getMostVisiblePosition(); } else if (mCurrentView == YEAR_VIEW) { listPosition = mYearPickerView.getFirstVisiblePosition(); + outState.putInt(KEY_LIST_POSITION_OFFSET, mYearPickerView.getFirstPositionOffset()); } outState.putInt(KEY_LIST_POSITION, listPosition); } @@ -202,6 +204,7 @@ public class DatePickerDialog extends DialogFragment implements mYearView.setOnClickListener(this); int listPosition = -1; + int listPositionOffset = 0; int currentView = MONTH_AND_DAY_VIEW; if (savedInstanceState != null) { mWeekStart = savedInstanceState.getInt(KEY_WEEK_START); @@ -209,6 +212,7 @@ public class DatePickerDialog extends DialogFragment implements mMaxYear = savedInstanceState.getInt(KEY_YEAR_END); currentView = savedInstanceState.getInt(KEY_CURRENT_VIEW); listPosition = savedInstanceState.getInt(KEY_LIST_POSITION); + listPositionOffset = savedInstanceState.getInt(KEY_LIST_POSITION_OFFSET); } final Activity activity = getActivity(); @@ -248,7 +252,7 @@ public class DatePickerDialog extends DialogFragment implements if (currentView == MONTH_AND_DAY_VIEW) { mDayPickerView.postSetSelection(listPosition); } else if (currentView == YEAR_VIEW) { - mYearPickerView.postSetSelection(listPosition); + mYearPickerView.postSetSelectionFromTop(listPosition, listPositionOffset); } } return view; diff --git a/src/com/android/datetimepicker/date/YearPickerView.java b/src/com/android/datetimepicker/date/YearPickerView.java index 465b759..411c574 100644 --- a/src/com/android/datetimepicker/date/YearPickerView.java +++ b/src/com/android/datetimepicker/date/YearPickerView.java @@ -79,15 +79,19 @@ public class YearPickerView extends ListView implements OnItemClickListener, OnD public void onItemClick(AdapterView<?> parent, View view, int position, long id) { mController.tryVibrate(); TextViewWithCircularIndicator clickedView = (TextViewWithCircularIndicator) view; - if (mSelectedView != clickedView) { - mSelectedView.drawIndicator(false); - mSelectedView.requestLayout(); - clickedView.drawIndicator(true); - clickedView.requestLayout(); - mSelectedView = clickedView; + if (clickedView != null) { + if (clickedView != mSelectedView) { + if (mSelectedView != null) { + mSelectedView.drawIndicator(false); + mSelectedView.requestLayout(); + } + clickedView.drawIndicator(true); + clickedView.requestLayout(); + mSelectedView = clickedView; + } + mController.onYearSelected(getYearFromTextView(clickedView)); + mAdapter.notifyDataSetChanged(); } - mController.onYearSelected(getYearFromTextView(clickedView)); - mAdapter.notifyDataSetChanged(); } private int getYearFromTextView(TextView view) { @@ -115,31 +119,32 @@ public class YearPickerView extends ListView implements OnItemClickListener, OnD } } - public void postSetSelection(final int position) { - post(new Runnable() { - - @Override - public void run() { - setSelection(position); - requestLayout(); - } - }); + public void postSetSelectionCentered(final int position) { + postSetSelectionFromTop(position, mViewSize / 2 - mChildSize / 2); } - public void postSetSelectionFromTop(final int position) { + public void postSetSelectionFromTop(final int position, final int offset) { post(new Runnable() { @Override public void run() { - setSelectionFromTop(position, mViewSize / 2 - mChildSize / 2); + setSelectionFromTop(position, offset); requestLayout(); } }); } + public int getFirstPositionOffset() { + final View firstChild = getChildAt(0); + if (firstChild == null) { + return 0; + } + return firstChild.getTop(); + } + @Override public void onDateChanged() { mAdapter.notifyDataSetChanged(); - postSetSelectionFromTop(mController.getSelectedDay().year - mController.getMinYear()); + postSetSelectionCentered(mController.getSelectedDay().year - mController.getMinYear()); } } |
