From b6af533114cfa5a4547990e79e96bd0402c47e72 Mon Sep 17 00:00:00 2001 From: Mihai Preda Date: Tue, 28 Apr 2009 14:21:57 +0200 Subject: Allow ViewStub to be used in AdapterView.setEmptyView() (bug 1803058) --- core/java/android/view/ViewStub.java | 18 +++++++++++++++--- core/java/android/widget/AdapterView.java | 2 +- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/core/java/android/view/ViewStub.java b/core/java/android/view/ViewStub.java index e159de46bf18..703a38f299ca 100644 --- a/core/java/android/view/ViewStub.java +++ b/core/java/android/view/ViewStub.java @@ -23,6 +23,8 @@ import android.util.AttributeSet; import com.android.internal.R; +import java.lang.ref.WeakReference; + /** * A ViewStub is an invisible, zero-sized View that can be used to lazily inflate * layout resources at runtime. @@ -68,6 +70,8 @@ public final class ViewStub extends View { private int mLayoutResource = 0; private int mInflatedId; + private WeakReference mInflatedViewRef; + private OnInflateListener mInflateListener; public ViewStub(Context context) { @@ -196,9 +200,15 @@ public final class ViewStub extends View { */ @Override public void setVisibility(int visibility) { - super.setVisibility(visibility); - - if (visibility == VISIBLE || visibility == INVISIBLE) { + if (mInflatedViewRef != null) { + View view = mInflatedViewRef.get(); + if (view != null) { + view.setVisibility(visibility); + } else { + throw new IllegalStateException("setVisibility called on un-referenced view"); + } + } else if (visibility == VISIBLE || visibility == INVISIBLE) { + super.setVisibility(visibility); inflate(); } } @@ -234,6 +244,8 @@ public final class ViewStub extends View { parent.addView(view, index); } + mInflatedViewRef = new WeakReference(view); + if (mInflateListener != null) { mInflateListener.onInflate(this, view); } diff --git a/core/java/android/widget/AdapterView.java b/core/java/android/widget/AdapterView.java index 173e80f54f75..afa67c420219 100644 --- a/core/java/android/widget/AdapterView.java +++ b/core/java/android/widget/AdapterView.java @@ -162,7 +162,7 @@ public abstract class AdapterView extends ViewGroup { /** * View to show if there are no items to show. */ - View mEmptyView; + private View mEmptyView; /** * The number of items in the current adapter. -- cgit v1.2.3-59-g8ed1b