{"id":18430769,"url":"https://github.com/sunfusheng/multitype","last_synced_at":"2025-10-07T19:36:07.185Z","repository":{"id":89229579,"uuid":"139423597","full_name":"sunfusheng/MultiType","owner":"sunfusheng","description":"【MultiType】可以轻松地实现RecyclerView显示多种数据类型，数据对应布局一对多、多对多、多对一，可以注册全局类型、局部类型、默认类型","archived":false,"fork":false,"pushed_at":"2020-04-17T06:55:53.000Z","size":619,"stargazers_count":83,"open_issues_count":1,"forks_count":7,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-22T22:24:23.083Z","etag":null,"topics":["multitype","recyclerview"],"latest_commit_sha":null,"homepage":"https://github.com/sunfusheng/MultiType","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sunfusheng.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-07-02T09:47:53.000Z","updated_at":"2023-08-07T20:13:50.000Z","dependencies_parsed_at":"2023-06-14T12:15:35.619Z","dependency_job_id":null,"html_url":"https://github.com/sunfusheng/MultiType","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/sunfusheng%2FMultiType","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunfusheng%2FMultiType/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunfusheng%2FMultiType/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunfusheng%2FMultiType/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sunfusheng","download_url":"https://codeload.github.com/sunfusheng/MultiType/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247698196,"owners_count":20981317,"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":["multitype","recyclerview"],"created_at":"2024-11-06T05:22:19.395Z","updated_at":"2025-10-07T19:36:02.142Z","avatar_url":"https://github.com/sunfusheng.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MultiType [ ![Download](https://api.bintray.com/packages/sfsheng0322/maven/MultiType/images/download.svg) ](https://bintray.com/sfsheng0322/maven/MultiType/_latestVersion)\n\n为实现RecyclerView显示多种类型数据，包括各种Headers、Footers，参考[drakeet](https://github.com/drakeet)的扛鼎之作[MultiType](https://github.com/drakeet/MultiType)后，\n着重优化了一对多的显示，即一种数据类型对应多种布局的情况，例如新闻数据类型（News.class）就可能显示\n文本、左图、右图、大图、多图等多种item布局，面对这种情况就要根据数据中的类型字段（你指定属性的get()方法）去区分，\n这里通过Java8的特性传递方法的引用，再通过KeyGenerator执行这个方法获取数据对应的值来解决这个问题的。\n\n该库不仅可以显示同一种数据类型对应不同的layout，还可以显示不同数据类型对应不同的layout，如果你没有\n通过[MultiTypeRegistry](https://github.com/sfsheng0322/MultiType/blob/master/MultiType/src/main/java/com/sunfusheng/multitype/MultiTypeRegistry.java)全局注册或\n通过[MultiTypeAdapter](https://github.com/sfsheng0322/MultiType/blob/master/MultiType/src/main/java/com/sunfusheng/multitype/MultiTypeAdapter.java)局部注册过你的数据类型，\n这个库不会让应用崩掉，会返回默认的提示layout，当然你也可以注册自己的默认数据类型，具体使用参考下面。\n\n# MultiState [ ![Download](https://api.bintray.com/packages/sfsheng0322/maven/MultiState/images/download.svg) ](https://bintray.com/sfsheng0322/maven/MultiState/_latestVersion)\n\nMultiState 这个库为了管理请求数据的加载中、加载成功、加载失败、数据为空的情况，与MultiType配合使用更合适。\n\n# RecyclerViewWrapper [ ![Download](https://api.bintray.com/packages/sfsheng0322/maven/RecyclerViewWrapper/images/download.svg) ](https://bintray.com/sfsheng0322/maven/RecyclerViewWrapper/_latestVersion)\n\nRecyclerViewWrapper 这个库结合【MultiType】和【MultiState】并使用了[SmartRefreshLayout](https://github.com/scwang90/SmartRefreshLayout)这个库来统一管理各个加载状态并简单封装了下拉刷新、上拉加载更多等相关功能，欢迎下载apk体验。\n\n## Sample预览图\n\n![](resources/res.png)\n\n#### Gradle配置\n\n    // MultiType\n    api 'com.sunfusheng:MultiType:\u003clatest-version\u003e'\n    \n    // MultiState\n    api 'com.sunfusheng:MultiState:\u003clatest-version\u003e'\n    \n    // RecyclerViewWrapper\n    compile 'com.sunfusheng:RecyclerViewWrapper:\u003clatest-version\u003e'\n    \n    // 如果不想用库里版本的RecyclerView，可这样配置\n    api 'com.sunfusheng:RecyclerViewWrapper:\u003clatest-version\u003e', {\n        exclude group: 'com.android.support'\n    }\n    \n    // 如果同步不下来库的话，在工程下的 build.gradle 添加：\n    allprojects {\n        repositories {\n            maven { url 'https://dl.bintray.com/sfsheng0322/maven' }\n        }\n    }\n\n## MultiType的使用\n\n#### 全局注册\n\n```java\nMultiTypeRegistry.getInstance().register(News.class, News::getType, News.TYPE_TEXT, new TextBinder());\nMultiTypeRegistry.getInstance().register(News.class, News::getType, News.TYPE_BIG_IMAGE, new BigImageBinder());\nMultiTypeRegistry.getInstance().register(News.class, News::getType, News.TYPE_RIGHT_IMAGE, new RightImageBinder());\nMultiTypeRegistry.getInstance().register(News.class, News::getType, News.TYPE_THREE_IMAGES, new ThreeImagesBinder());\nMultiTypeRegistry.getInstance().register(Music.class, new MusicBinder());\nMultiTypeRegistry.getInstance().register(Video.class, new VideoBinder());\n```\n\n#### 注册默认或不支持类型\n\n```java\nMultiTypeRegistry.getInstance().registerDefaultBinder(new NonsupportBinder());\n```\n\n#### 局部注册，局部注册会覆盖全局的\n\n```java\nMultiTypeAdapter multiTypeAdapter = new MultiTypeAdapter();\nmultiTypeAdapter.register(News.class, News::getType, News.TYPE_TEXT, new TextBinder());\nmultiTypeAdapter.register(News.class, News::getType, News.TYPE_BIG_IMAGE, new BigImageBinder());\nmultiTypeAdapter.register(News.class, News::getType, News.TYPE_RIGHT_IMAGE, new RightImageBinder());\nmultiTypeAdapter.register(News.class, News::getType, News.TYPE_THREE_IMAGES, new ThreeImagesBinder());\nmultiTypeAdapter.register(Music.class, new MusicBinder());\nmultiTypeAdapter.register(Video.class, new VideoBinder());\n```\n\n#### 初始化，设置数据\n\n```java\nRecyclerView recyclerView = findViewById(R.id.recyclerView);\nrecyclerView.setLayoutManager(new LinearLayoutManager(this));\nrecyclerView.setAdapter(multiTypeAdapter);\n\nmultiTypeAdapter.setItems(@NonNull List\u003c?\u003e items);\nmultiTypeAdapter.notifyDataSetChanged();\n```\n\n## MultiState的使用\n\n| 属性 | 作用 | \n| :------ | :------ | \n| loadingLayout | 加载中布局 | \n| normalLayout | 正常显示数据的布局 | \n| errorLayout | 加载失败布局 |\n| emptyLayout | 数据为空布局 |\n| loadingState | 初始的加载状态 |\n\n#### xml配置\n\n```xml\n\u003ccom.sunfusheng.multistate.MultiStateView\n    android:id=\"@+id/multiStateView\"\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    app:loadingLayout=\"@layout/layout_loading\"\n    app:normalLayout=\"@layout/layout_recyclerview\"\n    app:errorLayout=\"@layout/layout_error\"\n    app:emptyLayout=\"@layout/layout_empty\"\n    app:loadingState=\"loading\"/\u003e\n```\n\n#### 设置加载状态\n\n    multiStateView.setLoadingState(@LoadingState int loadingState);\n    \n### [APK下载地址](https://fir.im/MultiType)，去手机上体验吧^_^\n\n\u003cimg src=\"/resources/fir.png\"\u003e\n\n\u003cbr/\u003e\n\n### 个人微信公众号\n\n\u003cimg src=\"http://sunfusheng.com/assets/wx_gongzhonghao.png\"\u003e\n\n\u003cbr/\u003e\n\n### 请作者喝杯咖啡^_^\n\n\u003cimg src=\"http://sunfusheng.com/assets/wx_shoukuanma.png\" \u003e\n\n\u003cbr/\u003e\n\n### 关于我\n\n[GitHub: sunfusheng](https://github.com/sunfusheng)  \n\n[个人邮箱: sfsheng0322@126.com](https://mail.126.com/)\n  \n[个人博客: sunfusheng.com](http://sunfusheng.com/)\n  \n[简书主页](http://www.jianshu.com/users/88509e7e2ed1/latest_articles)\n  \n[新浪微博](http://weibo.com/u/3852192525) ","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsunfusheng%2Fmultitype","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsunfusheng%2Fmultitype","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsunfusheng%2Fmultitype/lists"}