在ConstraintLayout的可见性设置为View.GONE

时间:2017-06-30 13:51:43

标签: android android-layout android-fragments android-constraintlayout android-viewgroup

我正在构建的应用程序有一个用例,根据一些数据,我在Fragment中创建了部分。为了可视化,给定的片段A具有主容器元素为ScrollView的布局。在那里,滚动视图有一个工具栏(与此问题无关),然后ConstraintLayout(显示所有片段的内容,让我们称之为masterLayout)。我需要做的是,基于boolean(我们称之为hasSection)从masterLayout中移除视图组件。因此,有时片段A将显示masterLayout(它不在容器中的第0位 - 它是视图树中的第5个组件),有时它不会。现在,我试着简单地打电话:

((ViewGroup)masterLayout.getParent()).removeView(masterLayout);

部分有效。这里的问题是,视图被删除,但它占用的空间不是。因此,在视图树中出现在该视图之后的任何其他子项都不会“向上移动”。我不能这样离开,因为masterLayout有高度= 200dp。如您所见,它将占据屏幕的很大一部分。因此,在研究了网络之后,我找到了解决方案来设置其可见性:

masterLayout.setVisibility(View.GONE);

按预期工作。视图被删除,所有进一步的子视图都相应地向上移动,因此没有空的和不需要的空间。问题是当我转移离开那个片段时(假设有一个可点击的视图将用户带到另一个片段)并再次返回它(例如使用带有onBackPressed()的后退按钮)已设置为visibility = masterLayout的{​​{1}}将不再显示。

如何实现从布局中移除/隐藏特定视图的功能,让其下方的下一个视图向上移动以覆盖空白区域(如View.GONE那样),同时在导航时恢复原始布局描述片段?

逻辑的完整代码:

View.GONE

1 个答案:

答案 0 :(得分:1)

Fragment lifecycle可以在这里提供帮助。

一种方法是始终将masterLayout恢复为片段的onResume方法中的可见性View.VISIBLE。

@Override
public void onResume() {
    super.onResume();
    masterLayout.setVisibility(View.VISIBLE);
}