Android 标题视图设置为view.GONE时ListView未收缩

Android 标题视图设置为view.GONE时ListView未收缩,android,listview,layout,Android,Listview,Layout,我在列表视图中有一个头视图,不使用时要隐藏。我包含了将其可见性设置为View.GONE或View.VISIBLE的代码,具体取决于另一个控件 不幸的是,我试图显示和隐藏的视图的布局就像我将其可见性设置为视图。不可见的——也就是说,列表视图为它留出了空间,即使它是隐藏的。我怎样才能防止这种情况 我尝试调用requestLayout(),但没有任何效果 我将在这里尝试一种建议的解决方案: 也就是说,将我的标题包装在FrameLayout中,让FrameLayout处理布局更改,而不是ListVie

我在
列表视图中有一个头视图,不使用时要隐藏。我包含了将其可见性设置为
View.GONE
View.VISIBLE
的代码,具体取决于另一个控件

不幸的是,我试图显示和隐藏的视图的布局就像我将其可见性设置为
视图。不可见的
——也就是说,
列表视图
为它留出了空间,即使它是隐藏的。我怎样才能防止这种情况

我尝试调用
requestLayout()
,但没有任何效果

我将在这里尝试一种建议的解决方案:

也就是说,将我的标题包装在
FrameLayout
中,让
FrameLayout
处理布局更改,而不是
ListView


编辑:我发现当我添加了一个
ViewPager
子类时,基本上会出现相同的错误,在这个子类中,我将
onMeasure(int-widthmasurespec,int-heightMeasureSpec)
作为标题视图覆盖了
:它被设计为在添加子视图时再次布局,但
列表视图
显示错误。但是,作为
线性布局的孩子,这很好。

不要使用
视图。可见的
视图。对于显示和隐藏
列表视图
页眉和页脚,不使用

寻求帮助

View v="YOUR VIEW";//Assume
您可以删除标题,如

your_list.removeHeaderView(v)
你可以加上

your_list.addHeaderView(v);

希望这对您有所帮助。

我添加了一个
FrameLayout
作为要隐藏的标题磁贴的父视图。这意味着当我隐藏平铺时,
FrameLayout
会收缩以适应它,并向
ListView
报告一个零的高度,该高度也会收缩。这是一个非常有效的解决方法,尽管有点奇怪。

这是我的原始代码,但不起作用:

wv = new WebView(getActivity());
AbsListView.LayoutParams params = new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, AbsListView.LayoutParams.WRAP_CONTENT);
wv.setLayoutParams(params);
...

((ListView) mainListView).addHeaderView(wv);
我已将webview放置到framelayout,并使用addHeaderView将此framelayout添加到listview

FrameLayout fl = new FrameLayout(getActivity());
AbsListView.LayoutParams paramsFl = new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, AbsListView.LayoutParams.WRAP_CONTENT);
fl.setLayoutParams(paramsFl);

wv = new WebView(getActivity());
AbsListView.LayoutParams params = new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, AbsListView.LayoutParams.WRAP_CONTENT);
wv.setLayoutParams(params);
...

fl.addView(wv);

((ListView) mainListView).addHeaderView(fl);

之后,当我将webview的可见性设置为Goe时,标题变得不可见。

在更改可见性后尝试调用
requestLayout
方法。我这样做了:什么都没有。应该在问题中提到,抱歉(我现在就这么做!)您可以尝试使用View.GONE。我正在使用
View.GONE
!不。这正是我的问题:如何使其工作?据我所知,在设置适配器之前必须先修复标题,以便
ListView
可以包装光标,所以我不确定这是否有帮助@amit gupta,但是为什么我们不应该使用View。GONE@BharatSharmaListView中有一个removeHeaderView(View)方法,为什么不使用此方法而不是View.GONE?这也不能解释存在多个标题视图的情况:重新添加标题视图时,它不会显示在其原始位置。一般来说,此解决方案也不适用于带有附加适配器的
ListView
,如果不需要适配器,更好的解决方案是
ScrollView
@AmitGupta中的
LinearLayout
,因为这会影响
ListView
包装适配器光标的方式,并且不允许在正确的位置重新添加标题。我想隐藏和显示标题。使用此方法,会导致SwiperFreshLayout出现问题(允许在标题完全显示之前进行刷新)。我怎样才能解决这个问题?