# FastAdapter **Repository Path**: hihopeorg/FastAdapter ## Basic Information - **Project Name**: FastAdapter - **Description**: No description available - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-02-27 - **Last Updated**: 2022-01-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # FastAdapter **本项目是基于开源项目FastAdapter进行ohos的移植和开发的,可以通过项目标签以及github地址(https://github.com/mikepenz/FastAdapter )追踪到原项目版本** ## 项目介绍 - 项目名称:FastAdapter - 所属系列:ohos的第三方组件适配移植 - 功能:用于简化ListContainer的ItemProvider使用,只需要编写Item和Holder的实现逻辑即可,也支持便捷的扩展功能。 - 项目移植状态:完成 - 调用差异:无 - 项目作者和维护人:hihope - 联系方式:hihope@hoperun.com - 原项目Doc地址:https://github.com/mikepenz/FastAdapter - 原项目基线版本:v3.3.1, sha1: 02070197437eefb309a82820f0ebd0778fb79c2d - 编程语言:Java - 外部库依赖:无 ## Preview ## 安装教程 Library主要分为library, core, extensions, 以及extensions_expandable四部分。 1. 下载har包:library.har, library_core.har, library_extensions.har, library_extensions_expandable.har。 2. 启动 DevEco Studio,将下载的har包,导入工程目录“entry->libs”下。 3. 在moudle级别下的build.gradle文件中添加依赖,在dependences标签中增加对libs目录下har包的引用。 ``` dependencies { implementation fileTree(dir: 'libs', include: ['*.jar', '*.har']) } ``` 4. 在导入的har包上点击右键,选择“Add as Library”对包进行引用,选择需要引用的模块,并点击“OK”即引用成功。 ## 使用说明 ### 1. 实现Item(简单使用) 参考下面代码继承`AbstractItem`,实现对应方法即可。 ```java public class SimpleItem extends AbstractItem { public String name; public String description; //The unique ID for this type of item @Override public int getType() { return ResourceTable.Id_fastadapter_sampleitem_id; } //The layout to be used for this type of item @Override public int getLayoutRes() { return ResourceTable.Layout_sample_item; } @Override public ViewHolder getViewHolder(@NonNull View v) { return new ViewHolder(v); } /** * our ViewHolder */ protected static class ViewHolder extends FastAdapter.ViewHolder { Text name; Text description; public ViewHolder(Component view) { super(view); name = (Text)view.findComponentById(ResourceTable.Id_material_drawer_name); description = (Text)view.findComponentById(ResourceTable.Id_material_drawer_description); } @Override public void bindView(SimpleItem item, List payloads) { //set the text for the name StringHolder.applyTo(item.name, name); //set the text for the description or hide StringHolder.applyToOrHide(item.description, description); } @Override public void unbindView(SimpleItem item) { name.setText(null); description.setText(null); } } } ``` ### 2. 设置Adapter到ListContainer中 ```java //create the ItemAdapter holding your Items ItemAdapter itemAdapter = new ItemAdapter(); //create the managing FastAdapter, by passing in the itemAdapter FastAdapter fastAdapter = FastAdapter.with(itemAdapter); //set our adapters to the ListContainer listContainer.setItemProvider(fastAdapter); //set the items to your ItemAdapter itemAdapter.add(ITEMS); ``` ### 3. 点击事件监听 ```java fastAdapter.withSelectable(true); fastAdapter.withOnClickListener(new OnClickListener() { @Override public boolean onClick(Component c, IAdapter adapter, Item item, int position) { // Handle click here return true; } }); ``` ### 4. 监听Item中的Component的点击事件 ```java //just add an `EventHook` to your `FastAdapter` by implementing either a `ClickEventHook`, `LongClickEventHook`, `TouchEventHook`, `CustomEventHook` fastItemAdapter.withEventHook(new ClickEventHook() { @Override public Component onBind(RecyclerAdapter.ViewHolder viewHolder) { //return the views on which you want to bind this event if (viewHolder instanceof SampleItem.ViewHolder) { return ((ViewHolder) viewHolder).view; } return null; } @Override public void onClick(Component c, int position, FastAdapter fastAdapter, SampleItem item) { //react on the click event } }); ``` ### 5. 过滤器 ```java // Call this in onQueryTextSubmit() & onQueryTextChange() when using SearchView itemAdapter.filter("yourSearchTerm"); itemAdapter.getItemFilter().withFilterPredicate(new IItemAdapter.Predicate() { @Override public boolean filter(Item item, CharSequence constraint) { return item.getName().startsWith(String.valueOf(constraint)); } }); ``` `filter()` 返回true的item会被保留,返回false时,对应item会被移除. ### 6. 使用不同的ViewHolder(比如Header) 首先初始化Adapter: ```java // Head is a model class for your header ItemAdapter
headerAdapter = new ItemAdapter<>(); ``` 然后初始化Model FastAdapter: ```java ItemAdapter itemAdapter = new ItemAdapter<>(); ``` 最终,设置Adapter: ```java FastAdapter fastAdapter = FastAdapter.with(headerAdapter, itemAdapter); //the order defines in which order the items will show up recyclerView.setAdapter(fastAdapter); ``` ## 版本迭代 - v1.0.1 ## 版权和许可信息 - Apache License, Version 2.0