From 0bb3d7ce1553aa614b9c342485bcfc293fe68e9f Mon Sep 17 00:00:00 2001 From: Julian Winkler Date: Sat, 17 Feb 2024 15:28:29 +0100 Subject: [PATCH] implement ViewStub.inflate() --- src/api-impl/android/view/ViewStub.java | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/api-impl/android/view/ViewStub.java b/src/api-impl/android/view/ViewStub.java index 14be6c70..b7c640aa 100644 --- a/src/api-impl/android/view/ViewStub.java +++ b/src/api-impl/android/view/ViewStub.java @@ -1,16 +1,37 @@ package android.view; import android.content.Context; +import android.content.res.TypedArray; import android.util.AttributeSet; public class ViewStub extends View { + private int layoutResource; + public ViewStub(Context context) { - super(context); + this(context, null, 0); } public ViewStub(Context context, AttributeSet attributeSet) { - super(context, attributeSet); + this(context, attributeSet, 0); + } + + public ViewStub(Context context, AttributeSet attributeSet, int defStyle) { + super(context, attributeSet, defStyle); + TypedArray a = context.obtainStyledAttributes(attributeSet, com.android.internal.R.styleable.ViewStub); + layoutResource = a.getResourceId(com.android.internal.R.styleable.ViewStub_layout, -1); + a.recycle(); + } + + public View inflate() { + if (layoutResource == -1) + throw new IllegalStateException("ViewStub must have a valid layoutResource"); + ViewGroup parent = (ViewGroup) getParent(); + View view = LayoutInflater.from(getContext()).inflate(layoutResource, parent, false); + int index = parent.indexOfChild(this); + parent.removeView(this); + parent.addView(view, index, getLayoutParams()); + return view; } }