{"id":13638980,"url":"https://github.com/hongyangAndroid/baseAdapter","last_synced_at":"2025-04-19T21:35:20.183Z","repository":{"id":35819494,"uuid":"40102186","full_name":"hongyangAndroid/baseAdapter","owner":"hongyangAndroid","description":"Android 万能的Adapter for ListView,RecyclerView,GridView等，支持多种Item类型的情况。","archived":false,"fork":false,"pushed_at":"2021-10-13T10:21:40.000Z","size":724,"stargazers_count":4728,"open_issues_count":115,"forks_count":1200,"subscribers_count":160,"default_branch":"master","last_synced_at":"2024-10-29T15:27:35.718Z","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/hongyangAndroid.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}},"created_at":"2015-08-03T02:55:51.000Z","updated_at":"2024-10-29T03:06:36.000Z","dependencies_parsed_at":"2022-08-02T13:14:26.943Z","dependency_job_id":null,"html_url":"https://github.com/hongyangAndroid/baseAdapter","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/hongyangAndroid%2FbaseAdapter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hongyangAndroid%2FbaseAdapter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hongyangAndroid%2FbaseAdapter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hongyangAndroid%2FbaseAdapter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hongyangAndroid","download_url":"https://codeload.github.com/hongyangAndroid/baseAdapter/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223810228,"owners_count":17206718,"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:00:56.231Z","updated_at":"2024-11-09T09:30:29.237Z","avatar_url":"https://github.com/hongyangAndroid.png","language":"Java","readme":"# base-adapter\r\nAndroid 万能的Adapter for ListView,RecyclerView,GridView等，支持多种Item类型的情况。\r\n\r\n\r\n## 引入\r\n\r\n### ForRecyclerView\r\n\r\n```\r\ncompile 'com.zhy:base-rvadapter:3.0.3'\r\n```\r\n\r\n### ForListView\r\n\r\n```\r\ncompile 'com.zhy:base-adapter:3.0.3'\r\n```\r\n\r\n\r\n## 使用\r\n\r\n##（1）简单的数据绑定(ListView与其使用方式一致)\r\n\r\n首先看我们最常用的单种Item的书写方式：\r\n\r\n```\r\nmRecyclerView.setAdapter(new CommonAdapter\u003cString\u003e(this, R.layout.item_list, mDatas)\r\n{\r\n    @Override\r\n    public void convert(ViewHolder holder, String s)\r\n    {\r\n        holder.setText(R.id.id_item_list_title, s);\r\n    }\r\n});\r\n```\r\n是不是相当方便，在convert方法中完成数据、事件绑定即可。\r\n\r\n\r\n只需要简单的将Adapter继承CommonAdapter，复写convert方法即可。省去了自己编写ViewHolder等大量的重复的代码。\r\n\r\n* 可以通过holder.getView(id)拿到任何控件。\r\n* ViewHolder中封装了大量的常用的方法，比如holder.setText(id,text)，holder.setOnClickListener(id,listener)等，可以支持使用。\r\n\r\n效果图：\r\n\r\n\u003cimg src=\"screenshot/single.png\" width=\"320px\"/\u003e\r\n\r\n##（2）多种ItemViewType(ListView与其使用方式一致)\r\n\r\n对于多中itemviewtype的处理参考：https://github.com/sockeqwe/AdapterDelegates ，具有极高的扩展性。\r\n\r\n\r\n```\r\nMultiItemTypeAdapter adapter = new MultiItemTypeAdapter(this,mDatas);\r\nadapter.addItemViewDelegate(new MsgSendItemDelagate());\r\nadapter.addItemViewDelegate(new MsgComingItemDelagate());\r\n```\r\n\r\n每种Item类型对应一个ItemViewDelegete，例如：\r\n\r\n```\r\npublic class MsgComingItemDelagate implements ItemViewDelegate\u003cChatMessage\u003e\r\n{\r\n\r\n    @Override\r\n    public int getItemViewLayoutId()\r\n    {\r\n        return R.layout.main_chat_from_msg;\r\n    }\r\n\r\n    @Override\r\n    public boolean isForViewType(ChatMessage item, int position)\r\n    {\r\n        return item.isComMeg();\r\n    }\r\n\r\n    @Override\r\n    public void convert(ViewHolder holder, ChatMessage chatMessage, int position)\r\n    {\r\n        holder.setText(R.id.chat_from_content, chatMessage.getContent());\r\n        holder.setText(R.id.chat_from_name, chatMessage.getName());\r\n        holder.setImageResource(R.id.chat_from_icon, chatMessage.getIcon());\r\n    }\r\n}\r\n```\r\n\r\n贴个效果图：\r\n\r\n\u003cimg src=\"screenshot/rvadapter_01.png\" width=\"360px\"/\u003e\r\n\r\n\r\n\r\n\r\n##(3) 添加HeaderView、FooterView\r\n\r\n```\r\nmHeaderAndFooterWrapper = new HeaderAndFooterWrapper(mAdapter);\r\n\r\nTextView t1 = new TextView(this);\r\nt1.setText(\"Header 1\");\r\nTextView t2 = new TextView(this);\r\nt2.setText(\"Header 2\");\r\nmHeaderAndFooterWrapper.addHeaderView(t1);\r\nmHeaderAndFooterWrapper.addHeaderView(t2);\r\n\r\nmRecyclerView.setAdapter(mHeaderAndFooterWrapper);\r\nmHeaderAndFooterWrapper.notifyDataSetChanged();\r\n```\r\n\r\n类似装饰者模式，直接将原本的adapter传入，初始化一个HeaderAndFooterWrapper对象，然后调用相关API添加。\r\n\r\n##(4) 添加LoadMore\r\n\r\n```\r\nmLoadMoreWrapper = new LoadMoreWrapper(mOriginAdapter);\r\nmLoadMoreWrapper.setLoadMoreView(R.layout.default_loading);\r\nmLoadMoreWrapper.setOnLoadMoreListener(new LoadMoreWrapper.OnLoadMoreListener()\r\n{\r\n    @Override\r\n    public void onLoadMoreRequested()\r\n    {\r\n    }\r\n});\r\n\r\nmRecyclerView.setAdapter(mLoadMoreWrapper);\r\n\r\n```\r\n直接将原本的adapter传入，初始化一个LoadMoreWrapper对象，然后调用相关API即可。\r\n\r\n##(5)添加EmptyView\r\n\r\n```\r\nmEmptyWrapper = new EmptyWrapper(mAdapter);\r\nmEmptyWrapper.setEmptyView(R.layout.empty_view);\r\n\r\nmRecyclerView.setAdapter(mEmptyWrapper );\r\n\r\n```\r\n\r\n直接将原本的adapter传入，初始化一个EmptyWrapper对象，然后调用相关API即可。\r\n\r\n\r\n支持链式添加多种功能，示例代码：\r\n\r\n```\r\nmAdapter = new EmptyViewWrapper(\r\n\tnew LoadMoreWrapper(\r\n\tnew HeaderAndFooterWrapper(mOriginAdapter)));\r\n```\r\n\r\n\r\n## 一些回调\r\n\r\n### onViewHolderCreated\r\n\r\n```\r\nmListView.setAdapter(new CommonAdapter\u003cString\u003e(this, R.layout.item_list, mDatas)\r\n{\r\n    @Override\r\n    public void convert(ViewHolder holder, String o, int pos)\r\n    {\r\n        holder.setText(R.id.id_item_list_title, o);\r\n    }\r\n\r\n    @Override\r\n    public void onViewHolderCreated(ViewHolder holder, View itemView)\r\n    {\r\n        super.onViewHolderCreated(holder, itemView);\r\n       //AutoUtil.autoSize(itemView)\r\n    }\r\n});\r\n```\r\n\r\n\r\n## 感谢\r\n\r\n\r\n* [https://github.com/JoanZapata/base-adapter-helper](https://github.com/JoanZapata/base-adapter-helper)\r\n\r\n    应该是我所知道的最早的对listview,gridview封装的adapter了，参考了其中很多，比如在`ViewHolder.setXXX`类的辅助方法。\r\n\r\n* [https://github.com/sockeqwe/AdapterDelegates](https://github.com/sockeqwe/AdapterDelegates)\r\n\t\r\n\t参考该库多种ItemType绑定数据方式\r\n\r\n* [https://github.com/ragunathjawahar/simple-section-adapter](https://github.com/ragunathjawahar/simple-section-adapter)\r\n\r\n    `SectionAdapter`对其进行了参考。\r\n\r\n\r\n","funding_links":[],"categories":["Java","RecyclerView"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FhongyangAndroid%2FbaseAdapter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FhongyangAndroid%2FbaseAdapter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FhongyangAndroid%2FbaseAdapter/lists"}