Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

【MultiType】可以轻松地实现RecyclerView显示多种数据类型,数据对应布局一对多、多对多、多对一,可以注册全局类型、局部类型、默认类型

NotificationsYou must be signed in to change notification settings

sunfusheng/MultiType

Repository files navigation

为实现RecyclerView显示多种类型数据,包括各种Headers、Footers,参考drakeet的扛鼎之作MultiType后,着重优化了一对多的显示,即一种数据类型对应多种布局的情况,例如新闻数据类型(News.class)就可能显示文本、左图、右图、大图、多图等多种item布局,面对这种情况就要根据数据中的类型字段(你指定属性的get()方法)去区分,这里通过Java8的特性传递方法的引用,再通过KeyGenerator执行这个方法获取数据对应的值来解决这个问题的。

该库不仅可以显示同一种数据类型对应不同的layout,还可以显示不同数据类型对应不同的layout,如果你没有通过MultiTypeRegistry全局注册或通过MultiTypeAdapter局部注册过你的数据类型,这个库不会让应用崩掉,会返回默认的提示layout,当然你也可以注册自己的默认数据类型,具体使用参考下面。

MultiStateDownload

MultiState 这个库为了管理请求数据的加载中、加载成功、加载失败、数据为空的情况,与MultiType配合使用更合适。

RecyclerViewWrapperDownload

RecyclerViewWrapper 这个库结合【MultiType】和【MultiState】并使用了SmartRefreshLayout这个库来统一管理各个加载状态并简单封装了下拉刷新、上拉加载更多等相关功能,欢迎下载apk体验。

Sample预览图

Gradle配置

// MultiTypeapi 'com.sunfusheng:MultiType:<latest-version>'// MultiStateapi 'com.sunfusheng:MultiState:<latest-version>'// RecyclerViewWrappercompile 'com.sunfusheng:RecyclerViewWrapper:<latest-version>'// 如果不想用库里版本的RecyclerView,可这样配置api 'com.sunfusheng:RecyclerViewWrapper:<latest-version>', {    exclude group: 'com.android.support'}// 如果同步不下来库的话,在工程下的 build.gradle 添加:allprojects {    repositories {        maven { url 'https://dl.bintray.com/sfsheng0322/maven' }    }}

MultiType的使用

全局注册

MultiTypeRegistry.getInstance().register(News.class,News::getType,News.TYPE_TEXT,newTextBinder());MultiTypeRegistry.getInstance().register(News.class,News::getType,News.TYPE_BIG_IMAGE,newBigImageBinder());MultiTypeRegistry.getInstance().register(News.class,News::getType,News.TYPE_RIGHT_IMAGE,newRightImageBinder());MultiTypeRegistry.getInstance().register(News.class,News::getType,News.TYPE_THREE_IMAGES,newThreeImagesBinder());MultiTypeRegistry.getInstance().register(Music.class,newMusicBinder());MultiTypeRegistry.getInstance().register(Video.class,newVideoBinder());

注册默认或不支持类型

MultiTypeRegistry.getInstance().registerDefaultBinder(newNonsupportBinder());

局部注册,局部注册会覆盖全局的

MultiTypeAdaptermultiTypeAdapter =newMultiTypeAdapter();multiTypeAdapter.register(News.class,News::getType,News.TYPE_TEXT,newTextBinder());multiTypeAdapter.register(News.class,News::getType,News.TYPE_BIG_IMAGE,newBigImageBinder());multiTypeAdapter.register(News.class,News::getType,News.TYPE_RIGHT_IMAGE,newRightImageBinder());multiTypeAdapter.register(News.class,News::getType,News.TYPE_THREE_IMAGES,newThreeImagesBinder());multiTypeAdapter.register(Music.class,newMusicBinder());multiTypeAdapter.register(Video.class,newVideoBinder());

初始化,设置数据

RecyclerViewrecyclerView =findViewById(R.id.recyclerView);recyclerView.setLayoutManager(newLinearLayoutManager(this));recyclerView.setAdapter(multiTypeAdapter);multiTypeAdapter.setItems(@NonNullList<?>items);multiTypeAdapter.notifyDataSetChanged();

MultiState的使用

属性作用
loadingLayout加载中布局
normalLayout正常显示数据的布局
errorLayout加载失败布局
emptyLayout数据为空布局
loadingState初始的加载状态

xml配置

<com.sunfusheng.multistate.MultiStateViewandroid:id="@+id/multiStateView"xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"app:loadingLayout="@layout/layout_loading"app:normalLayout="@layout/layout_recyclerview"app:errorLayout="@layout/layout_error"app:emptyLayout="@layout/layout_empty"app:loadingState="loading"/>

设置加载状态

multiStateView.setLoadingState(@LoadingState int loadingState);

APK下载地址,去手机上体验吧^_^


个人微信公众号


请作者喝杯咖啡^_^


关于我

GitHub: sunfusheng

个人邮箱: sfsheng0322@126.com

个人博客: sunfusheng.com

简书主页

新浪微博

About

【MultiType】可以轻松地实现RecyclerView显示多种数据类型,数据对应布局一对多、多对多、多对一,可以注册全局类型、局部类型、默认类型

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages


[8]ページ先頭

©2009-2025 Movatter.jp