我在尝试从listView
中删除标题时遇到了一些问题。起初我使用addHeaderView()
添加它,但是当我改变到另一个布局我希望它消失,但removeHeaderView()
不起作用...从列表中删除标题查看
我也尝试设置可见性去,它不会消失...
我该怎么办?
在此先感谢
我在尝试从listView
中删除标题时遇到了一些问题。起初我使用addHeaderView()
添加它,但是当我改变到另一个布局我希望它消失,但removeHeaderView()
不起作用...从列表中删除标题查看
我也尝试设置可见性去,它不会消失...
我该怎么办?
在此先感谢
如果您正在使用addHeaderView(),你不能在这之后删除你的头。
所以,不要使用addHeaderView()。相反,创建您自己的适配器,将您主要的Views视图与您的标题混合。虽然我的 MergeAdapter将无法处理您的具体情况,你可以用它来查看 的混合多行源的概念:
试试下述方法..
的Android ListView#addHeaderView
和ListView#addFooterView
方法很奇怪:在设置ListView的适配器之前,必须添加页眉和页脚视图,以便ListView可以考虑页眉和页脚 - 否则将会发生异常。在这里,我们添加一个进度条(微调)作为headerView:
//微调是一个进度条
listView.addHeaderView(spinner);
我们希望能够显示和隐藏微调的意愿,但删除它完全是危险的,因为我们从来没有能够在不破坏ListView中再次添加它 - 记住,我们不能addHeaderView我们已经经过它的适配器:
listView.removeHeaderView(spinner); //dangerous!
让我们躲吧!结果也很难。只隐藏微调器视图本身会产生一个空的,但仍然可见的标题区域。
现在试图隐藏微调:
spinner.setVisibility(View.GONE);
结果:头区域仍然有一个丑陋的空间可见:
解决的办法是把进度在LinearLayout中包含它的内容,并隐藏内容。这样,当它的内容是隐藏的,导致headerView在技术上仍然存在包装的LinearLayout会崩溃,但0dip高:
<LinearLayout
xmlns:a="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<!-- simplified -->
<ProgressBar
android:id="@+id/spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
然后,设置布局的标题:
spinnerLayout = getLayoutInflater().inflate(R.layout.header_view_spinner, null);
listView.addHeaderView(spinnerLayout);
当我们需要隐藏它时,隐藏布局的内容,而不是布局:
spinnerLayout.findViewById(R.id.spinner).setVisibility(View.GONE);
现在标题从视图中消失。顶部没有更多丑陋的空间!
大多数人不喜欢使用AddHeaderView
,但是我有时会发现它非常方便,避免修改复杂的适配器,或者如果标题与它们不是很相关。
有了这个简单的技巧,你就能无缝删除/添加页眉:
我添加一个空LinearLayout
与orientation vertical
和高度wrap_content
,作为唯一的标题视图(让mListView
是目标listView
) :
LinearLayout mCustomHeaders=new LinearLayout(context);
mCustomHeaders.setOrientation(LinearLayout.VERTICAL);
mListView.addHeaderView(mCustomHeaders);
mListView.setAdapter (.......)
Thenafter,我可以添加随机的东西,任何地方,以列表的头,即使在列表已满:
mCustomHeaders.add(myHeaderView1);
mCustomHeaders.add(myHeaderView2);
mCustomHeaders.add(myHeaderView3);
您还可以删除所有标头,随时随地:
mCustomHeaders.removeAllViews(); // will erase all headers
你的想法....希望它可以帮助!
这非常有效。 –
哪里drawerLogoView
是我headerview,这里是我做的:
drawerLogoView = mInflater.inflate(R.layout.navigation_drawer_custom_layout, null);
mDrawerList.addHeaderView(drawerLogoView,null,false);
LinearLayout layOut = ((LinearLayout)drawerLogoView.findViewById(R.id.NavProfilePreviewLayout));
layOut.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, 0));
这样一来,就变成无形的:d 为了显示回来,你可以使用这个:
LinearLayout layOut = ((LinearLayout)drawerLogoView.findViewById(R.id.NavProfilePreviewLayout));
layOut.setLayoutParams(newRelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT));
我遇到这个问题在一个稍微伪装的场景中:我所处理的ListView来自PreferenceFragment,并且头部表示PreferenceCategory。所以,我设置ListView的自由受到严重限制。但有两种方法(部分受到本页其他答案的启发)。一种方法是将自定义布局添加到我的PreferenceCategory中(使用extends android.preference.PreferenceCategory
的类,请参阅Custom PreferenceCategory Headings)。但是,我发现了一个更简单的解决方法:在这个PreferenceCategory第一选择,我重写onCreateView()
:
@Override public View onCreateView(ViewGroup parent) {
parent.setTop(-parent.getChildAt(0).getTop());
return super.onCreateView(parent);
}
的问题是,你总是创建一个新的对象,当你做:
View headerView = someView
所以新的看法是不一样的已经加入的ListView头来看,试试这个:
View headerView = inflater.inflate(R.layout.adapter_datatable_saleitem_header, null, false);
headerView.setTag(this.getClass().getSimpleName() + "header");
if (listView.getHeaderViewsCount() > 0) {
View oldView = listView.findViewWithTag(this.getClass().getSimpleName() + "header");
if (oldView != null) {
listView.removeHeaderView(oldView);
}
}
您可以检查头计数> 0,则删除页眉和重新添加。
它的作品适合我。
View _headerView;
private void function HandleHeaderView(){
if(listView.getHeaderViewsCount() > 0)
{
listView.removeHeaderView(_headerView);
}
/* Add list view header */
_headerView = GetHeaderView();
listView.addHeaderView(_headerView);
}
private View GetHeaderView()
{
View header = getLayoutInflater().inflate(R.layout.header_layout, null);
// TODO: ...
return header
}
可以删除头视图如果你有一个变量指向头,看到此链接:http://stackoverflow.com/a/39286390/1817569 – Hamid