android View 自动 GONE 问题

   首先说一下 view visibility VISIBLE、INVISIBLE、GONE的区别:

可见(visible)

XML文件:android:visibility="visible"
Java代码:view.setVisibility(View.VISIBLE);

不可见(invisible)
XML文件:android:visibility="invisible"
Java代码:view.setVisibility(View.INVISIBLE);

隐藏(GONE)
XML文件:android:visibility="gone"
Java代码:view.setVisibility(View.GONE);

VISIBLE:设置控件可见
INVISIBLE:设置控件不可见
GONE:设置控件隐藏

而INVISIBLE和GONE的主要区别是:
当控件visibility属性为INVISIBLE时,界面保留了view控件所占有的空间;

而控件属性为GONE时,界面则不保留view控件所占有的空间。


下面开始进入正题,我的问题是出现在一个

PopupWindow 里面 含有一个 FrameLayout 布局,里面有一个 ListView,同时有一个 TextView,TextView visibility属性 GONE

当我们发现个别时候 Listview 在刷新后不能正常显示了(原来以为是数据问题,后来排除掉了),机率非常少,可能是百分之一,
但非常严重,不能恢复,重现很困难,但还是花时间重现了。
发现它的 visibility 属性 自动变成了 GONE,而和它同位置的 TextView 变成了 VISIBLE。

原因:可能是刷新过度造成,当为数据为空时我不再刷新,好像没有重现过,当然已经花了时间重现问题,
最好设置一下,如果发现 ListView visibility 属性为 GONE,设置为 VISIBLE,同时把TextView visibility 属性设置为 GONE
我尝试了一下,这样就没有问题了。

但是更深层原因,可能就没有办法去找了,如果有人知道可以在评论中回复一下,非常感谢。

转载于:https://www.cnblogs.com/sharecenter/p/5621049.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个问题可能与AppBarLayout的滚动效果有关。当你动态设置一个ViewGONE时,AppBarLayout会重新计算滚动范围,但是由于布局文件中的空白区域已经被占用了,新的滚动范围可能会出现空白占位问题。 解决办法是在AppBarLayout中使用`app:layout_scrollFlags="scroll|exitUntilCollapsed"`,并且在你要隐藏的View上添加`app:layout_collapseMode="pin"`。这样当你隐藏这个View时,AppBarLayout会自动调整滚动范围,并且不会出现空白占位问题。 示例代码如下: ```xml <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <android.support.design.widget.CollapsingToolbarLayout android:layout_width="match_parent" android:layout_height="wrap_content" app:contentScrim="?attr/colorPrimary" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <ImageView android:id="@+id/image" android:layout_width="match_parent" android:layout_height="200dp" android:scaleType="centerCrop" android:src="@drawable/image" app:layout_collapseMode="parallax" /> <TextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="16dp" android:text="Title" android:textColor="@android:color/white" android:textSize="24sp" app:layout_collapseMode="pin" /> <View android:id="@+id/view" android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="visible" app:layout_collapseMode="pin" /> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> ``` 在代码中,我把你要隐藏的View的`android:visibility`属性设置为`visible`,这样在初始状态下它会被显示出来。当你要隐藏它时,可以使用`view.setVisibility(View.GONE)`方法。AppBarLayout会根据你隐藏的View自动调整滚动范围,不会出现空白占位问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值