From 68464a95991d81872a99eefff86a98dd2bd4c8ed Mon Sep 17 00:00:00 2001 From: Adam Powell Date: Mon, 7 Jun 2010 12:48:07 -0700 Subject: [PATCH] Fix bug 2747634 - Crash on selecting wifi Allow Spinner to call setAdapter during superclass construction. Change-Id: Ia57d231249b28de3809d7ee09a77277eac1553ca --- core/java/android/widget/Spinner.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/core/java/android/widget/Spinner.java b/core/java/android/widget/Spinner.java index feb4211c93083..dde9a0727df03 100644 --- a/core/java/android/widget/Spinner.java +++ b/core/java/android/widget/Spinner.java @@ -51,6 +51,7 @@ public class Spinner extends AbsSpinner implements OnClickListener { public static final int MODE_DROPDOWN = 1; private SpinnerPopup mPopup; + private DropDownAdapter mTempAdapter; public Spinner(Context context) { this(context, null); @@ -96,12 +97,24 @@ public class Spinner extends AbsSpinner implements OnClickListener { mPopup.setPromptText(a.getString(com.android.internal.R.styleable.Spinner_prompt)); a.recycle(); + + // Base constructor can call setAdapter before we initialize mPopup. + // Finish setting things up if this happened. + if (mTempAdapter != null) { + mPopup.setAdapter(mTempAdapter); + mTempAdapter = null; + } } @Override public void setAdapter(SpinnerAdapter adapter) { super.setAdapter(adapter); - mPopup.setAdapter(new DropDownAdapter(adapter)); + + if (mPopup != null) { + mPopup.setAdapter(new DropDownAdapter(adapter)); + } else { + mTempAdapter = new DropDownAdapter(adapter); + } } @Override