Android 上拉刷新的实现方法
在Twitter(官方应用)等Android应用程序中,当遇到ListView时,可以将其下拉(释放时会反弹)来刷新内容。
我想知道您认为实现这一目标的最佳方法是什么?
我能想到的一些可能性:
- ListView 顶部的项目 - 但是我不认为在 ListView 上使用动画滚动回项目位置 1(从 0 开始)是一项容易的任务。
- ListView 之外的另一个视图 - 但我需要在拉动 ListView 时向下移动 ListView 位置,并且我不确定我们是否可以检测到对 ListView 的拖动触摸是否仍然真正滚动 ListView 上的项目。
有什么建议吗?
PS 我想知道官方 Twitter 应用程序源代码何时发布。之前有提到会发布,但是6个月过去了,我们还没有听到任何消息。
In Android applications such as Twitter (official app), when you encounter a ListView, you can pull it down (and it will bounce back when released) to refresh the content.
I wonder what is the best way, in your opinion, to implement that?
Some possibilities I could think of:
- An item on top of the ListView - however I don't think scrolling back to item position 1 (0-based) with animation on the ListView is an easy task.
- Another view outside the ListView - but I need to take care of moving the ListView position down when it is pulled, and I'm not sure if we can detect if the drag-touches to the ListView still really scroll the items on the ListView.
Any recommendations?
P.S. I wonder when the official Twitter app source code is released. It has been mentioned that it will be released, but 6 months has passed and we haven't heard about it since then.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(18)
谷歌终于发布了pull-to-refresh库的正式版!
它在支持库中称为
SwipeRefreshLayout
,文档为 此处:添加
SwipeRefreshLayout
作为视图的父级,该视图将被视为刷新布局的拉动。 (我以ListView
为例,它可以是任何View
,如LinearLayout
、ScrollView
等)向您的班级添加侦听器
您还可以根据您的要求调用
pullToRefresh.setRefreshing(true/false);
。更新
Android 支持库已被弃用并已被 AndroidX 取代。可以在此处找到新库的链接一个>。
另外,您需要将以下依赖项添加到您的项目中:
或
您可以转到“重构”>>“迁移到 AndroidX”,Android Studio 将为您处理依赖项。
Finally, Google released an official version of the pull-to-refresh library!
It is called
SwipeRefreshLayout
, inside the support library, and the documentation is here:Add
SwipeRefreshLayout
as a parent of view which will be treated as a pull to refresh the layout. (I tookListView
as an example, it can be anyView
likeLinearLayout
,ScrollView
etc.)Add a listener to your class
You can also call
pullToRefresh.setRefreshing(true/false);
as per your requirement.UPDATE
Android support libraries have been deprecated and have been replaced by AndroidX. The link to the new library can be found here.
Also, you need to add the following dependency to your project:
OR
You can go to Refactor>>Migrate to AndroidX and Android Studio will handle the dependencies for you.
我尝试实现拉动刷新组件,它远未完成,但演示了可能的实现,https://github.com/johannilsson/android-pulltorefresh。
主要逻辑在扩展
ListView
的PullToRefreshListView
中实现。在内部使用该小部件现已更新,支持 1.5 及更高版本,请阅读 README 以获取 1.5 支持尽管。smoothScrollBy
(API 级别 8)控制标题视图的滚动。在您的布局中,您只需像这样添加它即可。
I've made an attempt to implement a pull to refresh component, it's far from complete but demonstrates a possible implementation, https://github.com/johannilsson/android-pulltorefresh.
Main logic is implemented in
PullToRefreshListView
that extendsListView
.Internally it controls the scrolling of a header view usingThe widget is now updated with support for 1.5 and later, please read the README for 1.5 support though.smoothScrollBy
(API Level 8).In your layouts you simply add it like this.
我还为 Android 实现了一个强大、开源、易于使用且高度可定制的 PullToRefresh 库。您可以将 ListView 替换为 PullToRefreshListView,如项目页面上的文档中所述。
https://github.com/erikwt/PullToRefresh-ListView
I've also implemented a robust, open source, easy to use and highly customizable PullToRefresh library for Android. You can replace your ListView with the PullToRefreshListView as described in the documentation on the project page.
https://github.com/erikwt/PullToRefresh-ListView
我认为最简单的方法是由android支持库提供的:
android.support.v4.widget.SwipeRefreshLayout;
一旦导入,您就可以按如下方式定义布局:
我假设您使用回收器视图而不是列表视图。但是,listview 仍然可以工作,因此您只需要将 recyclerview 替换为 listview 并更新 java 代码(Fragment)中的引用即可。
在您的活动片段中,首先实现接口
SwipeRefreshLayout.OnRefreshListener
:i,e
希望这对大众有帮助
The easiest way i think is as provided by the android support library:
android.support.v4.widget.SwipeRefreshLayout;
once that is imported then you can have your layout defined as follows:
I assume that you use recycler view instead of listview. However, listview still works so you just need to replace recyclerview with listview and update the references in the java code (Fragment).
In your activity fragment, you first implement the interface,
SwipeRefreshLayout.OnRefreshListener
:i,e
Hope this helps the masses
在此链接中,您可以找到著名的
PullToRefresh
视图的分支,该视图具有新的有趣的实现,例如PullTorRefreshWebView
或PullToRefreshGridView
或添加PullToRefresh
位于列表的底部边缘。https://github.com/chrisbanes/Android-PullToRefresh
最好的一点是在 Android 4.1 中完美运行(正常的
PullToRefresh
不起作用)In this link, you can find a fork of the famous
PullToRefresh
view that has new interesting implementations likePullTorRefreshWebView
orPullToRefreshGridView
or the possibility to add aPullToRefresh
on the bottom edge of a list.https://github.com/chrisbanes/Android-PullToRefresh
And the best of it is that work perfect in Android 4.1 (the normal
PullToRefresh
doesn't work )要实现 android Pull-to-Refresh,请尝试这段代码,
Activity 类:
To implement android Pull-to-Refresh try this piece of code,
Activity class:
我有很简单的方法来做到这一点,但现在确信这是万无一失的方法
有我的代码
PullDownListView.java
你只需要在你想要使用这个ListView的活动上实现ListViewTouchEventListener并设置监听器
我已经在PullDownListViewActivity中实现了
它对我有用:)
I have very easy way to do this but now sure its the foolproof way
There is my code
PullDownListView.java
You just need to implement ListViewTouchEventListener on your activity where you want to use this ListView and set the listener
I have it implemented in PullDownListViewActivity
It works for me :)
没有人提到新类型的“拉动刷新”,它显示在操作栏顶部,就像在 Google Now 或 Gmail 应用程序中一样。
有一个库 ActionBar-PullToRefresh 其工作原理完全相同。
Nobody have mention the new type of "Pull to refresh" which shows on top of the action bar like in the Google Now or Gmail application.
There is a library ActionBar-PullToRefresh which works exactly the same.
请注意,在 Android 和 WP 上实施时需要解决一些 UX 问题。
“为什么设计师/开发人员不应该以 iOS 应用程序的方式实现拉动刷新的一个重要指标是,Google 及其团队在 iOS 中使用拉动刷新时从未在 Android 上使用拉动刷新。”
https://plus.google.com/109453683460749241197/posts/eqYxXR8L4eb
Note there are UX issues to contend with when implementing on Android and WP.
"A great indicator for why designers/devs should not implement pull-to-refresh in the style iOS apps do is how Google and their teams never use pull-to-refresh on Android while they do use it in iOS. "
https://plus.google.com/109453683460749241197/posts/eqYxXR8L4eb
如果您不希望您的程序看起来像强制安装到 Android 中的 iPhone 程序,请以更原生的外观和感觉为目标,并执行类似于 Gingerbread 的操作:
If you don't want your program to look like an iPhone program that is force fitted into Android, aim for a more native look and feel and do something similar to Gingerbread:
我在这里编写了一个拉动刷新组件: https://github.com/guillep/PullToRefresh
如果列表中没有项目,它会起作用,并且我已经在 >=1.6 Android 手机上进行了测试。
任何建议或改进表示赞赏:)
I've written a pull to refresh component here: https://github.com/guillep/PullToRefresh
It works event if the list does not have items, and I've tested it on >=1.6 android phones.
Any suggestion or improvement is appreciated :)
我认为最好的库是:https://github.com/chrisbanes/Android-PullToRefresh。
适用于:
I think the best library is : https://github.com/chrisbanes/Android-PullToRefresh.
Works with:
我们首先要知道什么是android中的Pull刷新布局。我们可以在android中将pull to refresh称为swipe-to-refresh。当您从上到下滑动屏幕时,它会根据 setOnRefreshListener 执行一些操作。
这里的教程演示了如何实现android pull刷新。我希望这有帮助。
We should first know what is Pull to refresh layout in android . we can call pull to refresh in android as swipe-to-refresh. when you swipe screen from top to bottom it will do some action based on setOnRefreshListener.
Here's tutorial that demonstrate about how to implement android pull to refresh. I hope this helps.
要获取最新的 Lollipop Pull-To Refresh:
android.support.v4.widget.SwipeRefreshLayout
加上android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener
详细指南可以在这里找到:http://antonioleiva.com/swiperefreshlayout/
另外,对于 ListView 我建议阅读有关
canChildScrollUp()
的内容评论;)To get the latest Lollipop Pull-To Refresh:
android.support.v4.widget.SwipeRefreshLayout
plusandroid.support.v4.widget.SwipeRefreshLayout.OnRefreshListener
Detailed guide could be found here: http://antonioleiva.com/swiperefreshlayout/
Plus for ListView I recommend to read about
canChildScrollUp()
in the comments ;)非常有趣的Pull-to-Refresh 作者:Yalantis。
iOS 版 Gif,但你可以检查一下:)
Very interesting Pull-to-Refresh by Yalantis.
Gif for iOS, but you can check it :)
那些想要为 RecyclerView 实现拉动刷新功能的人可以按照我的简单教程Android中RecyclerView如何实现拉动刷新。
要导入的库
XML 代码
活动 JAVA 代码
Those who are looking to implement pull to refresh functionality for RecyclerView can following my simple tutorial How to implement Pull To Refresh for RecyclerView in Android.
Libraries To Import
XML Code
Activity JAVA Code
如果您想在网页视图或其他地方使用拉动刷新,那么只需将此代码复制粘贴到您的项目中,就可以正常工作。
XML源代码:
JAVA代码:
Build.gradle源代码:
If you want to use pull to refresh in the webview or somewhere else, then simply copy paste this code into your project, it works fine.
XML Source code:
JAVA Code:
Build.gradle source code:
将其添加到您的布局中
现在只需将以下几行添加到您的代码中
您就完成了
Add this in your layout
Now simply add these below lines in your code
You are all done