当标题视图设置为View.GONE时,ListView不收缩

时间:2013-10-29 11:18:08

标签: android listview layout

我在ListView中有一个标题视图,我想在不使用时隐藏它。我已经添加了代码,根据另一个控件将其可见性设置为View.GONEView.VISIBLE

不幸的是,我试图展示和隐藏的视图正在布局,好像我将其可见性设置为View.INVISIBLE - 也就是说,ListView即使在隐藏时也允许空间。我该如何防止这种情况?

我试过调用requestLayout()并且没有任何效果。

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

Hide footer view in ListView?

即,将我的标题包裹在FrameLayout中并让FrameLayout处理布局更改,而不是ListView

编辑:我发现当我添加一个ViewPager子类时,基本上会出现同样的错误,其中我将onMeasure(int widthMeasureSpec, int heightMeasureSpec)覆盖为标题视图:它被设计为当孩子们被重新设置时已添加,但ListView显示错误。然而,作为LinearLayout的孩子,这很好。

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:0)

不要使用View.VISIBLEView.GONE 显示和隐藏 ListView 标题页脚

通过removeHeaderView寻求帮助。

View v="YOUR VIEW";//Assume

您可以删除标题

your_list.removeHeaderView(v)

你可以添加

your_list.addHeaderView(v);

希望这对你有所帮助。

答案 2 :(得分:0)

这是我的原始代码无效:

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的可见性设置为GONE标题时变得不可见。