android listviews:页眉和页脚视图

Posted

技术标签:

【中文标题】android listviews:页眉和页脚视图【英文标题】:android listviews: header and footer views 【发布时间】:2011-01-02 07:45:36 【问题描述】:

在我的 ListActivity 中,我需要页眉和页脚视图(在列表的顶部和底部)分别用作列表上的上一页和下一页按钮,因为我想一次只显示 20 个项目.

我通过以下方式设置我的页眉和页脚视图:

getListView().addHeaderView(myHeaderView);
getListView().addFooterView(myFooterView);
setListAdapter(adapter);

这很好用,但我需要动态删除和添加这些页眉和页脚视图,因为我的列表中的某些页面可能没有下一页按钮或上一页按钮。

问题是,调用 setListAdapter 后,我无法调用 addHeaderView 或 addFooterView。

有没有办法解决这个问题?

【问题讨论】:

这不是错误也不是疏忽,而是按预期工作:) 我在 android 的“办公时间”询问并在我的回答中添加了评论。 对不起,这应该是评论,不是有用的答案。 我通常会在设置适配器之前创建一个要设置为页脚的视图来解决这个问题,然后再次删除该视图。 【参考方案1】:

为什么不直接将页眉和页脚折叠为零高度,或者将按钮变灰(更好)。

在我看来,最好的用户体验是在需要时(即滚动时)动态加载更多项目,就像内置的 Gmail 应用一样。

【讨论】:

同意动态加载方式。我什至创建了一些可重用的代码来帮助解决这个问题:github.com/commonsguy/cwac-endless 如果我没记错的话,ListView 不会重新布局页眉或页脚视图,即使您将它们的可见性设置为 INVISIBLEGONE,所以你只剩下一个很大的空白区域。 我只能秒马克。 Droid-Fu 库中还有一个 ListAdapterWithProgress。您可以使用它来触发加载微调器作为最后一个元素,例如当用户一直向下滚动到底部时。 kaeppler.github.com/droid-fu 感谢您的回复,我会试一试零高度建议 :) @Christopher:是的,将可见性设置为 GONE 是我最初的想法,但太糟糕了,那里有空白 我发现隐藏标题的唯一简单方法是:***.com/questions/6829126/…【参考方案2】:

是的,这是ListView 组件中的错误或疏忽。您可以通过编写自己的 WrapperListAdapter 来解决此问题,该WrapperListAdapter 处理添加和删除固定列表项,但我可以告诉您这并不完全简单。

另外,更简单的是,您可以在 ListView 上方或下方添加一个固定组件,您可以在其中放置下一个和上一个按钮。

【讨论】:

作为更新,正如 Romain Guy 所提到的,这是预期的行为。我在 Android“办公时间”问为什么会这样。据我回忆,这是因为一旦列表绑定到光标,页眉和页脚就会被视为列表项,因此添加/删除它们会弄乱偏移量。如果要进行更改,可以将适配器重新绑定到列表。如果 SDK 中有一个可以处理这个问题的包装器会很好,但无论如何创建自己的包装器绝对是可能的。【参考方案3】:

如何在每次需要添加标题视图时重置适配器,像这样:

ListView.FixedViewInfo headerInfo = getListView().new FixedViewInfo();
headerInfo.isSelectable=false ;
headerInfo.view = feedInfoView;
headerInfos.add(headerInfo);
headerViewListAdapter = new HeaderViewListAdapter(headerInfos,null,adapter);
getListView().setAdapter(headerViewListAdapter);

【讨论】:

feedInfoView 是什么对象?

以上是关于android listviews:页眉和页脚视图的主要内容,如果未能解决你的问题,请参考以下文章

我们如何在滚动视图中设置过度滚动页眉和页脚?

Codeigniter 加载页眉和页脚一次

如何自动加载页眉和页脚视图?

限制 UItableView 的页眉和页脚的视图宽度

UICollectionView 页眉和页脚视图

在 CI 中加载页眉和页脚视图