Android代码中setvisibility失效了?

一、问题现象

最近在开发过程中遇到了在代码中setvisibility失效的问题,在网上查了好多资料都没有解决我的问题

二、发生背景

项目是MVVM架构,使用了databinding,想在tablayout+viewpager+fragment基础上,控制fragment中RecyclerView中的item里的一个ImageView隐藏与显示。控件通过databinding来setvisibility,但是无效。

三、通用解决方案(对此问题无效)

大部分原因是以下两点

1.控件本身正在执行动画。

2.设备的性能太差,需要重新加载才能显示正常,即需要被回收和重新构造。

问题1可以在控件调用隐藏之前,调用view.clearAnimation();

问题2可以尝试的使用view.invalidate()或者view.postinvalidate();

如果也不行,直接调用自身的requestLayout或者其父容器的requestLayout()进行强制的界面即时刷新重构;
 

四、最终解

前提条件是确保你的setvisibility()一定执行了~

根据背景提到的,我的项目用到了databinding,那么我在fragment中实例化一个binding对象,通过以下方式

  binding = DataBindingUtil.inflate(getLayoutInflater(), R.layout.fragment_manual_scene, null, false);
      

一般情况下通过binding.Imageview.setvisibility()是没有问题的,但是在此项目中就是无法生效。

后来经过一番调试我发现将上述实例化binding的代码换成如下

 binding = DataBindingUtil.bind(rootView.findViewById(R.id.auto_scene_cl));
 

此处的id是父布局的id,

经过这次的更改以后。setvisibility()失效的问题就解决了。

至于此处更改生效的原因及两种实例化方式的区别,有待进一步学习~

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FrancisBingo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值