安卓列表视图:标题和页脚视图

14

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

我通过以下方式设置我的头部和尾部视图:

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

这段代码运行良好,但我需要动态地移除和添加这些头部和底部视图,因为我的列表中有些页面可能没有下一页按钮或上一页按钮。

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

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


这不是一个错误或疏忽,而是按预期工作的 :) - Romain Guy
我在 Android 的“办公时间”内提出了问题,并在我的答案中添加了评论。 - Christopher Orr
抱歉,这应该是一条注释,而不是一个有用的答案。 - Janusz
我通常通过创建一个视图并在设置适配器之前将其设置为页脚,然后再将该视图删除来解决这个问题。 - Thomas Ahle
3个回答

10

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

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


4
同意采用动态加载的方法。我甚至创建了一些可重复使用的代码来协助此过程:http://github.com/commonsguy/cwac-endless - CommonsWare
3
如果我没记错的话,即使你将ListView中的头部或底部视图设置为INVISIBLE或者GONE,它也不会重新布局,所以你会得到一个很大的空白区域。 - Christopher Orr
1
我只能支持Mark的观点。在Droid-Fu库中还有一个ListAdapterWithProgress。你可以使用它来触发一个加载进度条,例如当用户滚动到底部时。http://kaeppler.github.com/droid-fu/ - mxk
1
谢谢回复,我会尝试设置零高度的建议 :)@Christopher: 是的,将可见性设置为GONE是我的最初想法,但很遗憾会留下空白的空间。 - jlim
1
我发现隐藏标题的唯一有效方法是这个:https://dev59.com/7Ww15IYBdhLWcg3wGn5c#7764524 - Rainbowbreeze
显示剩余2条评论

3
是的,这是ListView组件中的一个错误或疏忽。您可以通过编写自己的WrapperListAdapter来解决此问题,该适配器处理添加和删除固定列表项,但我可以告诉您这并不完全简单易行。
或者 - 更容易的方法 - 您可以在ListView上方或下方添加一个固定组件,在其中放置下一个和上一个按钮。

1
更新一下,正如Romain Guy所提到的,这是预期的行为。我在Android“办公时间”上询问了为什么会这样。据我回忆,这是因为一旦列表绑定到光标,标题和页脚就被视为列表项,因此添加/删除它们会破坏偏移量。如果您想进行更改,可以将适配器重新绑定到列表。如果SDK中有一个包装器可以处理这个问题,那就太好了,但是自己创建也是完全可能的。 - Christopher Orr

2
每次需要添加头部视图时,重置适配器怎么样?可以像这样做:
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是什么类型的对象? - Jimmy Ilenloa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接