我正在构建的应用程序有一个用例,根据一些数据,我在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
答案 0 :(得分:1)
Fragment lifecycle可以在这里提供帮助。
一种方法是始终将masterLayout恢复为片段的onResume方法中的可见性View.VISIBLE。
@Override
public void onResume() {
super.onResume();
masterLayout.setVisibility(View.VISIBLE);
}