2

我有一个标题视图,ListView我想在不使用时隐藏。我已经包含了将其可见性设置为View.GONEView.VISIBLE依赖于另一个控件的代码。

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

我试过打电话requestLayout(),但没有任何效果。

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

在 ListView 中隐藏页脚视图?

即,将我的标题包装在 a 中FrameLayout并让FrameLayout句柄布局更改,而不是ListView.

ViewPager编辑:我发现当我添加一个子类时,我发现基本上相同的错误发生了onMeasure(int widthMeasureSpec, int heightMeasureSpec):它被设计为在添加子类时再次布局,但ListView显示错误。但是,作为 a 的孩子LinearLayout,这很好用。

4

3 回答 3

6

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

于 2013-10-29T12:32:37.697 回答
0

不要使用View.VISIBLEorView.GONE显示和隐藏 ListView 页眉页脚

通过removeHeaderView寻求帮助。

View v="YOUR VIEW";//Assume

你可以删除像

your_list.removeHeaderView(v)

你可以添加

your_list.addHeaderView(v);

希望这对您有所帮助。

于 2013-10-29T11:26:52.993 回答
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 标头时变得不可见。

于 2015-09-13T14:53:27.887 回答