Loading core/java/android/widget/AbsSpinner.java +10 −34 Original line number Diff line number Diff line Loading @@ -28,8 +28,6 @@ import android.util.AttributeSet; import android.util.SparseArray; import android.view.View; import android.view.ViewGroup; import android.view.animation.Interpolator; /** * An abstract base class for spinner widgets. SDK users will probably not Loading @@ -38,24 +36,21 @@ import android.view.animation.Interpolator; * @attr ref android.R.styleable#AbsSpinner_entries */ public abstract class AbsSpinner extends AdapterView<SpinnerAdapter> { SpinnerAdapter mAdapter; int mHeightMeasureSpec; int mWidthMeasureSpec; boolean mBlockLayoutRequests; int mSelectionLeftPadding = 0; int mSelectionTopPadding = 0; int mSelectionRightPadding = 0; int mSelectionBottomPadding = 0; Rect mSpinnerPadding = new Rect(); View mSelectedView = null; Interpolator mInterpolator; final Rect mSpinnerPadding = new Rect(); RecycleBin mRecycler = new RecycleBin(); final RecycleBin mRecycler = new RecycleBin(); private DataSetObserver mDataSetObserver; /** Temporary frame to hold a child View's frame rectangle */ private Rect mTouchFrame; Loading Loading @@ -95,7 +90,6 @@ public abstract class AbsSpinner extends AdapterView<SpinnerAdapter> { setWillNotDraw(false); } /** * The Adapter is used to provide the data which backs this Spinner. * It also provides methods to transform spinner items based on their position Loading Loading @@ -190,7 +184,7 @@ public abstract class AbsSpinner extends AdapterView<SpinnerAdapter> { boolean needsMeasuring = true; int selectedPosition = getSelectedItemPosition(); if (selectedPosition >= 0 && mAdapter != null) { if (selectedPosition >= 0 && mAdapter != null && selectedPosition < mAdapter.getCount()) { // Try looking in the recycler. (Maybe we were measured once already) View view = mRecycler.get(selectedPosition); if (view == null) { Loading Loading @@ -237,7 +231,6 @@ public abstract class AbsSpinner extends AdapterView<SpinnerAdapter> { mWidthMeasureSpec = widthMeasureSpec; } int getChildHeight(View child) { return child.getMeasuredHeight(); } Loading @@ -254,27 +247,18 @@ public abstract class AbsSpinner extends AdapterView<SpinnerAdapter> { } void recycleAllViews() { int childCount = getChildCount(); final int childCount = getChildCount(); final AbsSpinner.RecycleBin recycleBin = mRecycler; final int position = mFirstPosition; // All views go in recycler for (int i = 0; i < childCount; i++) { View v = getChildAt(i); int index = mFirstPosition + i; int index = position + i; recycleBin.put(index, v); } } @Override void handleDataChanged() { // FIXME -- this is called from both measure and layout. // This is harmless right now, but we don't want to do redundant work if // this gets more complicated super.handleDataChanged(); } /** * Jump directly to a specific item in the adapter data. */ Loading @@ -285,7 +269,6 @@ public abstract class AbsSpinner extends AdapterView<SpinnerAdapter> { setSelectionInt(position, shouldAnimate); } @Override public void setSelection(int position) { setNextSelectedPositionInt(position); Loading Loading @@ -335,8 +318,6 @@ public abstract class AbsSpinner extends AdapterView<SpinnerAdapter> { } } @Override public SpinnerAdapter getAdapter() { return mAdapter; Loading Loading @@ -452,7 +433,7 @@ public abstract class AbsSpinner extends AdapterView<SpinnerAdapter> { } class RecycleBin { private SparseArray<View> mScrapHeap = new SparseArray<View>(); private final SparseArray<View> mScrapHeap = new SparseArray<View>(); public void put(int position, View v) { mScrapHeap.put(position, v); Loading @@ -470,11 +451,6 @@ public abstract class AbsSpinner extends AdapterView<SpinnerAdapter> { return result; } View peek(int position) { // System.out.print("Looking for " + position); return mScrapHeap.get(position); } void clear() { final SparseArray<View> scrapHeap = mScrapHeap; final int count = scrapHeap.size(); Loading Loading
core/java/android/widget/AbsSpinner.java +10 −34 Original line number Diff line number Diff line Loading @@ -28,8 +28,6 @@ import android.util.AttributeSet; import android.util.SparseArray; import android.view.View; import android.view.ViewGroup; import android.view.animation.Interpolator; /** * An abstract base class for spinner widgets. SDK users will probably not Loading @@ -38,24 +36,21 @@ import android.view.animation.Interpolator; * @attr ref android.R.styleable#AbsSpinner_entries */ public abstract class AbsSpinner extends AdapterView<SpinnerAdapter> { SpinnerAdapter mAdapter; int mHeightMeasureSpec; int mWidthMeasureSpec; boolean mBlockLayoutRequests; int mSelectionLeftPadding = 0; int mSelectionTopPadding = 0; int mSelectionRightPadding = 0; int mSelectionBottomPadding = 0; Rect mSpinnerPadding = new Rect(); View mSelectedView = null; Interpolator mInterpolator; final Rect mSpinnerPadding = new Rect(); RecycleBin mRecycler = new RecycleBin(); final RecycleBin mRecycler = new RecycleBin(); private DataSetObserver mDataSetObserver; /** Temporary frame to hold a child View's frame rectangle */ private Rect mTouchFrame; Loading Loading @@ -95,7 +90,6 @@ public abstract class AbsSpinner extends AdapterView<SpinnerAdapter> { setWillNotDraw(false); } /** * The Adapter is used to provide the data which backs this Spinner. * It also provides methods to transform spinner items based on their position Loading Loading @@ -190,7 +184,7 @@ public abstract class AbsSpinner extends AdapterView<SpinnerAdapter> { boolean needsMeasuring = true; int selectedPosition = getSelectedItemPosition(); if (selectedPosition >= 0 && mAdapter != null) { if (selectedPosition >= 0 && mAdapter != null && selectedPosition < mAdapter.getCount()) { // Try looking in the recycler. (Maybe we were measured once already) View view = mRecycler.get(selectedPosition); if (view == null) { Loading Loading @@ -237,7 +231,6 @@ public abstract class AbsSpinner extends AdapterView<SpinnerAdapter> { mWidthMeasureSpec = widthMeasureSpec; } int getChildHeight(View child) { return child.getMeasuredHeight(); } Loading @@ -254,27 +247,18 @@ public abstract class AbsSpinner extends AdapterView<SpinnerAdapter> { } void recycleAllViews() { int childCount = getChildCount(); final int childCount = getChildCount(); final AbsSpinner.RecycleBin recycleBin = mRecycler; final int position = mFirstPosition; // All views go in recycler for (int i = 0; i < childCount; i++) { View v = getChildAt(i); int index = mFirstPosition + i; int index = position + i; recycleBin.put(index, v); } } @Override void handleDataChanged() { // FIXME -- this is called from both measure and layout. // This is harmless right now, but we don't want to do redundant work if // this gets more complicated super.handleDataChanged(); } /** * Jump directly to a specific item in the adapter data. */ Loading @@ -285,7 +269,6 @@ public abstract class AbsSpinner extends AdapterView<SpinnerAdapter> { setSelectionInt(position, shouldAnimate); } @Override public void setSelection(int position) { setNextSelectedPositionInt(position); Loading Loading @@ -335,8 +318,6 @@ public abstract class AbsSpinner extends AdapterView<SpinnerAdapter> { } } @Override public SpinnerAdapter getAdapter() { return mAdapter; Loading Loading @@ -452,7 +433,7 @@ public abstract class AbsSpinner extends AdapterView<SpinnerAdapter> { } class RecycleBin { private SparseArray<View> mScrapHeap = new SparseArray<View>(); private final SparseArray<View> mScrapHeap = new SparseArray<View>(); public void put(int position, View v) { mScrapHeap.put(position, v); Loading @@ -470,11 +451,6 @@ public abstract class AbsSpinner extends AdapterView<SpinnerAdapter> { return result; } View peek(int position) { // System.out.print("Looking for " + position); return mScrapHeap.get(position); } void clear() { final SparseArray<View> scrapHeap = mScrapHeap; final int count = scrapHeap.size(); Loading