首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何检查viewStub是否已经充气?

如何检查viewStub是否已经充气?
EN

Stack Overflow用户
提问于 2014-05-21 20:25:29
回答 9查看 12K关注 0票数 19

我没有找到任何布尔方法来完成这项任务。是否可以通过检查viewStubid是否更改为指定为inflatedid的one来执行此操作

Javacode:

代码语言:javascript
复制
    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视图不可用。有什么建议吗?

代码语言:javascript
复制
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();
}
EN

回答 9

Stack Overflow用户

发布于 2015-02-06 18:27:57

我们可以查看ViewStub源码,最重要的方法是inflate()

代码语言:javascript
复制
 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是否已经膨胀了。

代码语言:javascript
复制
if (mViewStub.getParent() != null) {
    mViewStub.inflate();
} else {
    mViewStub.setVisibility(View.VISIBLE);
}
票数 29
EN

Stack Overflow用户

发布于 2017-09-07 16:07:34

代码语言:javascript
复制
if (mViewStub.getParent() != null) { 
    //have not been inflated
    mViewStub.inflate();
} else { 
    //already inflated
}
票数 6
EN

Stack Overflow用户

发布于 2014-05-21 20:44:03

来自谷歌的注释:

当ViewStub可见或调用

()时,布局资源将被膨胀。

所以你可以检查可见性(甚至可以检查它是否为"null")。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23783101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档