我在ListView
中有一个标题视图,我想在不使用时隐藏它。我已经添加了代码,根据另一个控件将其可见性设置为View.GONE
或View.VISIBLE
。
不幸的是,我试图展示和隐藏的视图正在布局,好像我将其可见性设置为View.INVISIBLE
- 也就是说,ListView
即使在隐藏时也允许空间。我该如何防止这种情况?
我试过调用requestLayout()
并且没有任何效果。
我将在这里尝试一种建议的解决方案:
即,将我的标题包裹在FrameLayout
中并让FrameLayout
处理布局更改,而不是ListView
。
ViewPager
子类时,基本上会出现同样的错误,其中我将onMeasure(int widthMeasureSpec, int heightMeasureSpec)
覆盖为标题视图:它被设计为当孩子们被重新设置时已添加,但ListView
显示错误。然而,作为LinearLayout
的孩子,这很好。
答案 0 :(得分:5)
我添加了一个FrameLayout
作为我想隐藏的标题图块的父视图。这意味着当我隐藏图块时,FrameLayout
会缩小以适应它,并向ListView
报告高度为零,这也会收缩。这是一个非常有效的解决方法,虽然有点奇怪。
答案 1 :(得分:0)
不要使用View.VISIBLE
或View.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标题时变得不可见。