diff options
author | Svetoslav Ganov <svetoslavganov@google.com> | 2010-12-08 16:11:30 -0800 |
---|---|---|
committer | Svetoslav Ganov <svetoslavganov@google.com> | 2010-12-08 16:11:30 -0800 |
commit | a911d4a2b1be7e9ea909a579167826e4a5bac1a3 (patch) | |
tree | 4da929d1f70cb5d4547b6182cd884ece36795e5f /core/java/android/widget/NumberPicker.java | |
parent | 994e2cd01c1c7550dbe1973320879d166b23d169 (diff) | |
download | frameworks_base-a911d4a2b1be7e9ea909a579167826e4a5bac1a3.zip frameworks_base-a911d4a2b1be7e9ea909a579167826e4a5bac1a3.tar.gz frameworks_base-a911d4a2b1be7e9ea909a579167826e4a5bac1a3.tar.bz2 |
bug_3259956 and bug_2166704
Change-Id: I71b4cc3c1111e7a4e78fb276d54a291c22fb2752
Diffstat (limited to 'core/java/android/widget/NumberPicker.java')
-rw-r--r-- | core/java/android/widget/NumberPicker.java | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/core/java/android/widget/NumberPicker.java b/core/java/android/widget/NumberPicker.java index 805bc08..4766c53 100644 --- a/core/java/android/widget/NumberPicker.java +++ b/core/java/android/widget/NumberPicker.java @@ -843,10 +843,14 @@ public class NumberPicker extends LinearLayout { * @see #setWrapSelectorWheel(boolean) */ public void setRange(int start, int end, String[] displayedValues, boolean wrapSelectorWheel) { + if (start == mStart && end == mEnd) { + return; + } + if (start < 0 || end < 0) { throw new IllegalArgumentException("start and end must be > 0"); } - + mDisplayedValues = displayedValues; mStart = start; mEnd = end; @@ -863,8 +867,7 @@ public class NumberPicker extends LinearLayout { mInputText.setRawInputType(InputType.TYPE_CLASS_NUMBER); } - // make sure cached string representations are dropped - mSelectorIndexToStringCache.clear(); + resetSelectorIndices(); } /** @@ -876,6 +879,9 @@ public class NumberPicker extends LinearLayout { * of the number picker. */ public void setCurrent(int current) { + if (mCurrent == current) { + return; + } if (current < mStart || current > mEnd) { throw new IllegalArgumentException("current should be >= start and <= end"); } @@ -1011,6 +1017,18 @@ public class NumberPicker extends LinearLayout { } /** + * Resets the selector indices and clear the cached + * string representation of these indices. + */ + private void resetSelectorIndices() { + mSelectorIndexToStringCache.clear(); + int[] selectorIdices = getSelectorIndices(); + for (int i = 0; i < selectorIdices.length; i++) { + selectorIdices[i] = Integer.MIN_VALUE; + } + } + + /** * Sets the current value of this NumberPicker, and sets mPrevious to the * previous value. If current is greater than mEnd less than mStart, the * value of mCurrent is wrapped around. Subclasses can override this to @@ -1177,9 +1195,9 @@ public class NumberPicker extends LinearLayout { */ private int getWrappedSelectorIndex(int selectorIndex) { if (selectorIndex > mEnd) { - return (Math.abs(selectorIndex) - mEnd); + return mStart + selectorIndex - mEnd - 1; } else if (selectorIndex < mStart) { - return (mEnd - Math.abs(selectorIndex)); + return mEnd + selectorIndex - mStart + 1; } return selectorIndex; } |