我们在使用ViewStub的时候,一般ViewStub都是特定条件出发inflate的。这种触发条件有多个的时候(或者有多处ViewStub的inflate 代码时)我们往往需要判断ViewStub之前有没有inflate过。
经过参考网上的文档,总结找出了两种方法:
1.ViewStub被inflate后就不会再布局中存在。所以每次在inflate的时候重新findViewById去页面中寻找一下ViewStub,如果返回值不为null则ViewStub没有被inflate过。
// 每次在inflate之前都调用一遍findViewById
ViewStub viewStub= (ViewStub) findViewById(R.id.viewstub); if(viewStub!=null){ viewStub.inflate(); }
2.利用ViewStub的parent来判断。当ViewStub被inflate后,getParent返回值是null
//初始化,不必每次都调用 ViewStub viewStub= (ViewStub) findViewById(R.id.viewstub); .... if(viewStub.getParent() !=null){ viewStub.inflate(); }
推荐使用第二种方法。