Udi*_*nic 20 android listview header
我正在尝试将标题视图添加到我的列表中,并一直隐藏它,除非我们滚动到它(如拉动刷新机制).问题是:如果列表不够高,无法填满屏幕 - 标题视图显示在列表顶部.
有没有办法隐藏它,只有当我们滚动它时才能看到它?我一直在尝试很多东西,但我无法找到一个好的和简单的方法.
谢谢
And*_*Dev 26
这是一篇博客文章,描述了一种隐藏和显示标题视图的简单方法.
我们的想法是将您希望隐藏的内容放入LinearLayout包装内容中,并仅隐藏内容.这样,包装LinearLayout将在其内容被隐藏时崩溃,从而导致headerView在技术上仍然存在,但是0dip高.
注意:如果您尝试隐藏没有封闭布局的内容,则会在标题视图中留下不需要的空间.
带有表示内容的微调器的示例布局:
<LinearLayout
xmlns:a="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ProgressBar
android:id="@+id/spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
然后你可以隐藏微调器(内容),如下所示:
spinnerLayout.findViewById(R.id.spinner).setVisibility(View.GONE);
Run Code Online (Sandbox Code Playgroud)
您可以查看ListView.setOverscrollHeader()或ListView.setOverscrollFooter().这是你正在寻找的行为吗?
如果没有,你能发布一些显示你目前为止的代码吗?
编辑:
好的,所以我查看了Overscrolling页眉/页脚,你是对的,我认为这根本不是你想要的.
相反,您应该从其他人试图模仿的Twitter应用程序中查看"拉动刷新"机制.您可以从这个问题中查找答案.
最有希望的答案似乎是由Johan Nilson编写的自定义ListView,其代码可以在这里找到:
https://github.com/johannilsson/android-pulltorefresh
编辑#2:
我看了一下PullToRefresh自定义ListView,你可能想要做什么,虽然不一定容易.请允许我解释一下.
PullToRefreshListView本质上只是一个利用标准ListViews中的可选Header的hack.您看到的隐藏的"Pull To Refresh"实际上只是ListView的标题.显示列表时,执行以下行:
setSelection(1);
Run Code Online (Sandbox Code Playgroud)
这会将列表滚动到列表中的第一个项目,有效地隐藏了标题.当List足够短以完全显示在屏幕上时,不需要滚动,因此"点击刷新"按钮.
当"点击刷新"可见时,拉动刷新机制被禁用,但很容易解决这个问题.拉动刷新效果是通过增加标题视图的顶部填充来实现的,这样看起来你正在拉下列表(当真正更准确地说是标题正在推动列表的其余部分时).
添加的填充量由源代码的第199行上的applyHeaderPadding()函数控制.在该函数中,第220行的if语句仅在列表处于RELEASE_TO_REFRESH模式时应用填充:
if (mRefreshState == RELEASE_TO_REFRESH)
{
//Some code that eventually adds padding to the header...
}
Run Code Online (Sandbox Code Playgroud)
如果您消除此条件或将其更改为应用填充,无论您处于何种模式,即使列表很短且标题显示"点击刷新",您也可以拖动刷新
if (true)
{
//Some code that eventually adds padding to the header...
}
Run Code Online (Sandbox Code Playgroud)
但是,这并不能完全创建您正在寻找的效果.如果列表很短,您可以将其向下拖动以刷新,但仍会显示"点击刷新"标题.现在问题是"如何在拖动动作开始之前隐藏标题?" 这是一个很难解决的问题,有几个专门针对它的Stack Overflow问题.
如果需要标题,则必须在为ListView设置适配器之前添加它,否则会出现各种错误.
我在这方面取得了一些成功,但我没有提出任何稳定的东西,因为我的解决方案是在已经被黑的PullToRefreshListView之上的一种令人讨厌的黑客攻击.我将一个空的FrameLayout设置为标题,并将原始的pull to刷新标题添加到该Frame Layout.然后,当我拖动列表时,我在Frame Layout的LayoutParameters中编辑了高度,以便像填充最初一样增长和缩小.它有点奏效,但最终会强行关闭,我还没弄明白为什么.
无论如何,如果我让它工作,我会发布代码,否则比我更聪明的人可能会根据我刚提供的信息提出解决方案.
| 归档时间: |
|
| 查看次数: |
20647 次 |
| 最近记录: |