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,

Android代码中setvisibility失效了?_第1张图片

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

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

你可能感兴趣的:(setvisibility失效,Android)