判断ViewStub是否被inflate 过的方式。

我们在使用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();
}

推荐使用第二种方法。

转自:https://www.cnblogs.com/jonzone/p/6248276.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
viewStub是一个轻量级的View,它可以延迟加载布局资源,而不必在Activity或Fragment的onCreate方法中立即加载视图树,这样可以提高应用程序的性能。而viewBinding是一种新的方式,它允许您直接从布局文件中获取对视图的引用,而不必使用findViewById()方法。当您使用viewStub时,您需要在布局文件中定义一个viewStub元素,然后在代码中使用它来加载布局资源。而当您使用viewBinding时,您需要在Activity或Fragment的onCreate方法中初始化绑定对象,然后使用它来获取对布局文件中的视图的引用。如果您要在使用viewBinding的情况下使用viewStub,您可以使用ViewBinding.inflate()方法来创建ViewBinding对象,然后使用ViewBinding.getRoot()方法来获取根视图,然后将其传递给viewStub的setVisibility()方法来显示或隐藏它。例如,您可以使用以下代码来显示viewStub: ``` private lateinit var binding: ActivityMainBinding private lateinit var stub: ViewStub override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) stub = binding.viewStub val inflatedView = binding.viewStub.inflate() // Do something with inflatedView } ``` 在这个例子中,我们首先使用ViewBinding.inflate()方法初始化了绑定对象,然后使用ViewBinding.getRoot()方法获取根视图,并将其传递给viewStub的setVisibility()方法来显示它。然后,我们使用viewStubinflate()方法来加载布局资源,并将返回的视图对象保存在一个变量中,以便我们可以在代码中使用它。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值