am 6a221b3f: Fix some bizarre Spinner behavior

* commit '6a221b3f85fbe7cbfbd11b9eeb672baca27faec2':
  Fix some bizarre Spinner behavior
This commit is contained in:
Adam Powell
2013-09-10 11:47:12 -07:00
committed by Android Git Automerger

View File

@@ -412,6 +412,8 @@ public class Spinner extends AbsSpinner implements OnClickListener {
public void setAdapter(SpinnerAdapter adapter) {
super.setAdapter(adapter);
mRecycler.clear();
if (mPopup != null) {
mPopup.setAdapter(new DropDownAdapter(adapter));
} else {
@@ -426,9 +428,8 @@ public class Spinner extends AbsSpinner implements OnClickListener {
if (getChildCount() > 0) {
child = getChildAt(0);
} else if (mAdapter != null && mAdapter.getCount() > 0) {
child = makeAndAddView(0);
child = makeView(0, false);
mRecycler.put(0, child);
removeAllViewsInLayout();
}
if (child != null) {
@@ -536,7 +537,7 @@ public class Spinner extends AbsSpinner implements OnClickListener {
mFirstPosition = mSelectedPosition;
if (mAdapter != null) {
View sel = makeAndAddView(mSelectedPosition);
View sel = makeView(mSelectedPosition, true);
int width = sel.getMeasuredWidth();
int selectedOffset = childrenLeft;
final int layoutDirection = getLayoutDirection();
@@ -571,17 +572,17 @@ public class Spinner extends AbsSpinner implements OnClickListener {
* from the old to new positions.
*
* @param position Position in the spinner for the view to obtain
* @return A view that has been added to the spinner
* @param addChild true to add the child to the spinner, false to obtain and configure only.
* @return A view for the given position
*/
private View makeAndAddView(int position) {
private View makeView(int position, boolean addChild) {
View child;
if (!mDataChanged) {
child = mRecycler.get(position);
if (child != null) {
// Position the view
setUpChild(child);
setUpChild(child, addChild);
return child;
}
@@ -591,7 +592,7 @@ public class Spinner extends AbsSpinner implements OnClickListener {
child = mAdapter.getView(position, null, this);
// Position the view
setUpChild(child);
setUpChild(child, addChild);
return child;
}
@@ -601,8 +602,9 @@ public class Spinner extends AbsSpinner implements OnClickListener {
* and fill out its layout paramters.
*
* @param child The view to position
* @param addChild true if the child should be added to the Spinner during setup
*/
private void setUpChild(View child) {
private void setUpChild(View child, boolean addChild) {
// Respect layout params that are already in the view. Otherwise
// make some up...
@@ -611,7 +613,9 @@ public class Spinner extends AbsSpinner implements OnClickListener {
lp = generateDefaultLayoutParams();
}
addViewInLayout(child, 0, lp);
if (addChild) {
addViewInLayout(child, 0, lp);
}
child.setSelected(hasFocus());
if (mDisableChildrenWhenDisabled) {