我使用SwipeRefreshLayout.setVisibility(View.GONE)获得了不一致的行为。有时,我的刷卡刷新布局会隐藏子视图,但有时候他们不会。由于SwipeRefreshLayout是ViewGroup的子类,因此我希望它始终隐藏子视图,只要它的可见性是.GONE,但这不会发生。
任何见解都表示赞赏。
<android.support.v4.widget.SwipeRefreshLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/mySwipeRefreshLayout">
<View
android:background="#FF0000"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.v4.widget.SwipeRefreshLayout>
更新:下午花了一些时间从片段中删除所有内容后,我确认我们的设置导致了问题。即便如此,将子视图设置为VIEW.Gone仍然很奇怪,但刷卡刷新布局不会隐藏孩子。
答案 0 :(得分:1)
如果您确认这不是由您的设置引起的,则应将此报告为错误,请参阅https://source.android.com/source/report-bugs.html。
作为一种解决方法,我建议将您的布局包装到FrameLayout
并在其上设置可见性,而不是SwipeRefreshLayout
。
答案 1 :(得分:1)
在您的xml文件中,为SwipeRefreshLayout提供ID并查看
<android.support.v4.widget.SwipeRefreshLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/mySwipeRefreshLayout">
<View
android:background="#FF0000"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.v4.widget.SwipeRefreshLayout>
然后在.java文件中使用id并使用它们的对象。
if(swipeRefreshLayout.isRefreshing()){
view.setVisibility(View.VISIBLE);
}else{
view.setVisibility(View.INVISIBLE);
}
答案 2 :(得分:1)
我觉得愚蠢,但我的问题最终是这样的:SwipeRefreshLayout在动画刷新徽标时不会隐藏。除了setRefreshing(false)
之外,您还必须setVisibility(View.GONE)
。即使在setRefreshing(false)
之后,也会在使用这两种方法后发生退出动画。
这是我用来解决这个问题的解决方案。它不仅可以在您想要隐藏它时处理调用setRefreshing(false)
,还可以将alpha设置为零,因此它可以立即隐藏,而无需等待刷新动画结束。
public class HideableSwipeRefreshLayout extends SwipeRefreshLayout {
public HideableSwipeRefreshLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void setVisibility(int visibility) {
if ((visibility == View.INVISIBLE) || (visibility == View.GONE)) {
setAlpha(0);
setRefreshing(false);
} else {
setAlpha(1);
}
super.setVisibility(visibility);
}
}