{"id":13641341,"url":"https://github.com/Chanven/CommonPullToRefresh","last_synced_at":"2025-04-20T07:33:00.554Z","repository":{"id":74596567,"uuid":"42983313","full_name":"Chanven/CommonPullToRefresh","owner":"Chanven","description":"Android widget with pull to refresh for all the views,and support loadMore for ListView , RecyclerView, GridView and SwipeRefreshLayout.","archived":false,"fork":false,"pushed_at":"2017-06-29T09:22:53.000Z","size":9095,"stargazers_count":1068,"open_issues_count":60,"forks_count":303,"subscribers_count":56,"default_branch":"master","last_synced_at":"2024-10-30T04:49:56.791Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Chanven.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2015-09-23T06:45:05.000Z","updated_at":"2024-08-29T01:30:05.000Z","dependencies_parsed_at":null,"dependency_job_id":"3febdfa4-6238-4016-9864-80667a8972e4","html_url":"https://github.com/Chanven/CommonPullToRefresh","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Chanven%2FCommonPullToRefresh","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Chanven%2FCommonPullToRefresh/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Chanven%2FCommonPullToRefresh/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Chanven%2FCommonPullToRefresh/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Chanven","download_url":"https://codeload.github.com/Chanven/CommonPullToRefresh/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223822235,"owners_count":17208830,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-02T01:01:19.933Z","updated_at":"2024-11-09T11:31:12.255Z","avatar_url":"https://github.com/Chanven.png","language":"Java","readme":"# CommonPullToRefresh\nAndroid widget with pull to refresh for all the views,and support loadMore for ListView,RecyclerView,GridView and SwipeRefreshLayout.\n\n在[android-Ultra-Pull-To-Refresh](https://github.com/liaohuqiu/android-Ultra-Pull-To-Refresh)的基础上增加了加载更多的支持，感谢作者\n\n* 下拉刷新支持大部分`view`：`ListView`、`ScrollView`、`WebView`等，甚至一个单独的`TextView`\n* 加载更多目前支持`ListView`、`RecyclerView`、`GridView`、`SwipeRefreshLayout`\n* 支持自定义header以及footer\n* 增加SwipeRefreshLayout刷新方式，同样支持加载更多\n\n[Demo APK下载](https://raw.githubusercontent.com/Chanven/CommonPullToRefresh/master/raw/CommonPullToRefresh_Demo.apk)\n\n\u003cdiv\u003e \u003cimg src='https://raw.githubusercontent.com/Chanven/CommonPullToRefresh/master/raw/main.png' width='270px'/\u003e \u003c/div\u003e\n\n#### ListView、RecyclerView截图\n \u003cdiv\u003e \u003cimg src='https://raw.githubusercontent.com/Chanven/CommonPullToRefresh/master/raw/listview.gif' width=\"270px\"/\u003e  \u003cimg src='https://raw.githubusercontent.com/Chanven/CommonPullToRefresh/master/raw/recyclerview.gif' width='270px'/\u003e \u003c/div\u003e\n \n#### GridView截图\n \u003cdiv\u003e \u003cimg src='https://raw.githubusercontent.com/Chanven/CommonPullToRefresh/master/raw/gridview.gif' width='270px'/\u003e \u003c/div\u003e\n \n#### SwipeRefreshLayout截图\n\u003cdiv\u003e \u003cimg src='https://raw.githubusercontent.com/Chanven/CommonPullToRefresh/master/raw/swipeListview.gif' width='270px'/\u003e \u003c/div\u003e\n\n# Usage\nGradle / Android Studio\n\n```\ncompile 'com.chanven.lib:cptr:1.1.0'\n```\n#### 下拉刷新配置\n\n有6个参数可配置:\n\n* 阻尼系数\n\n    默认: `1.7f`，越大，感觉下拉时越吃力。\n\t`mPtrFrame.setResistance(1.7f)`\n\n* 触发刷新时移动的位置比例\n\n    默认，`1.2f`，移动达到头部高度1.2倍时可触发刷新操作。\n\t`mPtrFrame.setRatioOfHeaderHeightToRefresh(1.2f)`\n\n* 回弹延时\n\n    默认 `200ms`，回弹到刷新高度所用时间。\n\t`mPtrFrame.setDurationToClose(200)`\n\n* 头部回弹时间\n\n    默认`1000ms`。\n\t`mPtrFrame.setDurationToCloseHeader(1000)`\n\n* 刷新是保持头部\n\n    默认值 `true`。\n\t`mPtrFrame.setKeepHeaderWhenRefresh(true)`\n\n* 下拉刷新 / 释放刷新\n\n    默认为释放刷新，即`false`。\n\t`mPtrFrame.setPullToRefresh(false)`\n\n##### 上面是在`java`代码中配置，也可在`xml`文件中配置\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n\u003cLinearLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\"\u003e\n\n    \u003ccom.chanven.lib.cptr.PtrClassicFrameLayout\n        android:id=\"@+id/test_list_view_frame\"\n        xmlns:cube_ptr=\"http://schemas.android.com/apk/res-auto\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:background=\"#f0f0f0\"\n        cube_ptr:ptr_resistance=\"1.7\"\n        cube_ptr:ptr_ratio_of_header_height_to_refresh=\"1.2\"\n        cube_ptr:ptr_duration_to_close=\"200\"\n        cube_ptr:ptr_duration_to_close_header=\"1000\"\n        cube_ptr:ptr_keep_header_when_refresh=\"true\"\n        cube_ptr:ptr_pull_to_fresh=\"false\"\u003e\n\n        \u003cListView\n            android:id=\"@+id/test_list_view\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:background=\"@android:color/white\"\n            android:choiceMode=\"singleChoice\"\n            android:divider=\"#b0b0b0\"\n            android:dividerHeight=\"0.1dp\"\n            android:fadingEdge=\"none\"\n            android:scrollbarStyle=\"outsideOverlay\"/\u003e\n    \u003c/com.chanven.lib.cptr.PtrClassicFrameLayout\u003e\n\n\u003c/LinearLayout\u003e\n```\n#### 处理刷新\n\n通过`PtrHandler`，可以检查确定是否可以下来刷新以及在合适的时间刷新数据。\n\n检查是否可以下拉刷新在`PtrDefaultHandler.checkContentCanBePulledDown`中有默认简单的实现，你可以根据实际情况完成这个逻辑。\n\n```java\npublic interface PtrHandler {\n    /**\n     * 检查是否可以执行下来刷新，比如列表为空或者列表第一项在最上面时。\n     * \u003cp/\u003e\n     * {@link com.chanven.lib.cptr.PtrDefaultHandler#checkContentCanBePulledDown}\n     */\n    public boolean checkCanDoRefresh(final PtrFrameLayout frame, final View content, final View header);\n\n    /**\n     * 需要加载数据时触发\n     *\n     * @param frame\n     */\n    public void onRefreshBegin(final PtrFrameLayout frame);\n}\n```\n#### 加载更多配置\n* 是否需要加载更多\n  默认`false`\n  `mPtrFrame.setLoadMoreEnable(true)`\n* 是否自动加载\n  默认`true`\n  `mPtrFrame.setAutoLoadMoreEnable(true)`\n\n#### Header、Footer样式\n* Header\t实现接口`PtrUIHandler`，已有默认实现`PtrClassicDefaultHeader`，并通过`PtrFrameLayout.setHeaderView(View header)`设置\n* Footer\t实现接口`ILoadMoreViewFactory`，已有默认实现`DefaultLoadMoreViewFooter`，并通过`PtrFrameLayout.setFooterView(ILoadMoreViewFactory factory)`设置\n\n## 常见问题\n\n*  ViewPager滑动冲突: `disableWhenHorizontalMove()`\n*  长按LongPressed, `setInterceptEventWhileWorking()`\n*  如果要禁用下拉刷新，则更改`PtrHandler.checkCanDoRefresh`的返回实现即可\n\n\n 具体栗子可参考Demo\n \n\n","funding_links":[],"categories":["下拉刷新","Libs"],"sub_categories":["\u003cA NAME=\"Widget\"\u003e\u003c/A\u003eWidget"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FChanven%2FCommonPullToRefresh","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FChanven%2FCommonPullToRefresh","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FChanven%2FCommonPullToRefresh/lists"}