我没有找到任何布尔方法来完成这项任务。是否可以通过检查viewStub
的id
是否更改为指定为inflatedid
的one来执行此操作
Javacode:
protected void plantViewTree() {
// TODO Auto-generated method stub
ViewStub mViewstub = (ViewStub) findViewById(R.id.viewStub00);
if (mViewStub is inflated) {
//do somthing
}else
mViewstub.inflate();
}
更新对此eOutput的评论
根据这段代码,toast
总是显示它的消息,这意味着因为mViewStub
被分配给findViewById
,所以它永远不会是null,除非底层分析输出中的viewstub
视图不可用。有什么建议吗?
protected void plantViewTree() {
// TODO Auto-generated method stub
ViewStub mViewstub = (ViewStub) findViewById(R.id.viewStub00);
if (mViewstub != null)
Toast.makeText(getApplicationContext(), "view is inflated",
Toast.LENGTH_LONG).show();
else
mViewstub.inflate();
}
发布于 2015-02-06 18:27:57
我们可以查看ViewStub
源码,最重要的方法是inflate()
public View inflate() {
final ViewParent viewParent = getParent();
if (viewParent != null && viewParent instanceof ViewGroup) {
if (mLayoutResource != 0) {
final ViewGroup parent = (ViewGroup) viewParent;
final LayoutInflater factory;
if (mInflater != null) {
factory = mInflater;
} else {
factory = LayoutInflater.from(mContext);
}
final View view = factory.inflate(mLayoutResource, parent,
false);
if (mInflatedId != NO_ID) {
view.setId(mInflatedId);
}
final int index = parent.indexOfChild(this);
parent.removeViewInLayout(this);
final ViewGroup.LayoutParams layoutParams = getLayoutParams();
if (layoutParams != null) {
parent.addView(view, index, layoutParams);
} else {
parent.addView(view, index);
}
mInflatedViewRef = new WeakReference<View>(view);
if (mInflateListener != null) {
mInflateListener.onInflate(this, view);
}
return view;
} else {
throw new IllegalArgumentException("ViewStub must have a valid layoutResource");
}
} else {
throw new IllegalStateException("ViewStub must have a non-null ViewGroup viewParent");
}
}
注意这一行parent.removeViewInLayout(this)
,它在inflate.so之后的layout中被删除了,我们可以用这种方式检查viewStub是否已经膨胀了。
if (mViewStub.getParent() != null) {
mViewStub.inflate();
} else {
mViewStub.setVisibility(View.VISIBLE);
}
发布于 2017-09-07 16:07:34
if (mViewStub.getParent() != null) {
//have not been inflated
mViewStub.inflate();
} else {
//already inflated
}
发布于 2014-05-21 20:44:03
来自谷歌的注释:
当ViewStub可见或调用
()时,布局资源将被膨胀。
所以你可以检查可见性(甚至可以检查它是否为"null")。
https://stackoverflow.com/questions/23783101
复制相似问题