[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-7324":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":16,"stars30d":17,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":18,"rankGlobal":10,"rankLanguage":10,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":20,"hasPages":20,"topics":22,"createdAt":10,"pushedAt":10,"updatedAt":39,"readmeContent":40,"aiSummary":41,"trendingCount":16,"starSnapshotCount":16,"syncStatus":42,"lastSyncTime":43,"discoverSource":44},7324,"FastAdapter","mikepenz\u002FFastAdapter","mikepenz","The bullet proof, fast and easy to use adapter library, which minimizes developing time to a fraction...","https:\u002F\u002Fmikepenz.dev",null,"Kotlin",3878,490,83,7,0,6,60.67,"Apache License 2.0",false,"develop",[23,24,25,26,27,28,29,30,31,32,33,7,34,35,36,37,38],"adapter","android","android-development","android-library","android-ui","click-listeners","drag-and-drop","fastadapter","hacktoberfest","kotlin","kotlin-android","multi-select","recyclerview","recyclerview-adapter","swipe","viewholder","2026-06-12 04:00:33","# FastAdapter\n\nThe FastAdapter is here to simplify creating adapters for RecyclerViews. Don't worry about the adapter anymore. Just write the logic for how your view\u002Fitem should look like, and you are done.\nIt's blazing fast, minimizing the code you need to write, and is easy to extend.\n\n-------\n\n\u003Cp align=\"center\">\n    \u003Ca href=\"#whats-included-\">What's included 🚀\u003C\u002Fa> &bull;\n    \u003Ca href=\"#setup\">Setup 🛠️\u003C\u002Fa> &bull;\n    \u003Ca href=\"MIGRATION.md\">Migration Guide 🧬\u003C\u002Fa> &bull;\n    \u003Ca href=\"#used-by\">Used by\u003C\u002Fa> &bull;\n    \u003Ca href=\"https:\u002F\u002Fplay.google.com\u002Fstore\u002Fapps\u002Fdetails?id=com.mikepenz.fastadapter.app\">Sample App\u003C\u002Fa>\n\u003C\u002Fp>\n\n-------\n\n### What's included 🚀\n- Core module 100% in Kotlin\n- Click \u002F Long-Click listeners\n- Selection \u002F Multi-Selection ([MultiselectSample](https:\u002F\u002Fgithub.com\u002Fmikepenz\u002FFastAdapter\u002Fblob\u002Fdevelop\u002Fapp\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fmikepenz\u002Ffastadapter\u002Fapp\u002FMultiselectSampleActivity.kt), [CheckBoxSample](https:\u002F\u002Fgithub.com\u002Fmikepenz\u002FFastAdapter\u002Fblob\u002Fdevelop\u002Fapp\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fmikepenz\u002Ffastadapter\u002Fapp\u002FCheckBoxSampleActivity.kt), [RadioButtonSample](https:\u002F\u002Fgithub.com\u002Fmikepenz\u002FFastAdapter\u002Fblob\u002Fdevelop\u002Fapp\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fmikepenz\u002Ffastadapter\u002Fapp\u002FRadioButtonSampleActivity.kt))\n- Expandable items ([ExpandableSample](https:\u002F\u002Fgithub.com\u002Fmikepenz\u002FFastAdapter\u002Fblob\u002Fdevelop\u002Fapp\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fmikepenz\u002Ffastadapter\u002Fapp\u002FExpandableSampleActivity.kt), [IconGridSample](https:\u002F\u002Fgithub.com\u002Fmikepenz\u002FFastAdapter\u002Fblob\u002Fdevelop\u002Fapp\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fmikepenz\u002Ffastadapter\u002Fapp\u002FIconGridActivity.kt) ,[AdvancedSample](https:\u002F\u002Fgithub.com\u002Fmikepenz\u002FFastAdapter\u002Fblob\u002Fdevelop\u002Fapp\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fmikepenz\u002Ffastadapter\u002Fapp\u002FAdvancedSampleActivity.kt))\n- Write less code, get better results\n- Highly optimized code\n- Simple Drag & Drop ([SimpleItemListSample](https:\u002F\u002Fgithub.com\u002Fmikepenz\u002FFastAdapter\u002Fblob\u002Fdevelop\u002Fapp\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fmikepenz\u002Ffastadapter\u002Fapp\u002FSimpleItemListActivity.kt))\n- Headers ([StickyHeaderSample](https:\u002F\u002Fgithub.com\u002Fmikepenz\u002FFastAdapter\u002Fblob\u002Fdevelop\u002Fapp\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fmikepenz\u002Ffastadapter\u002Fapp\u002FStickyHeaderSampleActivity.kt), [AdvancedSample](https:\u002F\u002Fgithub.com\u002Fmikepenz\u002FFastAdapter\u002Fblob\u002Fdevelop\u002Fapp\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fmikepenz\u002Ffastadapter\u002Fapp\u002FAdvancedSampleActivity.kt))\n- Footers\n- Filter ([SimpleItemListSample](https:\u002F\u002Fgithub.com\u002Fmikepenz\u002FFastAdapter\u002Fblob\u002Fdevelop\u002Fapp\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fmikepenz\u002Ffastadapter\u002Fapp\u002FSimpleItemListActivity.kt))\n- Includes suggestions from the Android Team\n- Easily extensible\n- Endless Scroll ([EndlessScrollSample](https:\u002F\u002Fgithub.com\u002Fmikepenz\u002FFastAdapter\u002Fblob\u002Fdevelop\u002Fapp\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fmikepenz\u002Ffastadapter\u002Fapp\u002FEndlessScrollListActivity.kt))\n- \"Leave-Behind\"-Pattern ([SwipeListSample](https:\u002F\u002Fgithub.com\u002Fmikepenz\u002FFastAdapter\u002Fblob\u002Fdevelop\u002Fapp\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fmikepenz\u002Ffastadapter\u002Fapp\u002FSwipeListActivity.kt))\n- Split item view and model ([ModelItem](https:\u002F\u002Fgithub.com\u002Fmikepenz\u002FFastAdapter\u002Fblob\u002Fdevelop\u002Fapp\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fmikepenz\u002Ffastadapter\u002Fapp\u002FModelItemActivity.kt), [MultiTypeModelItem](https:\u002F\u002Fgithub.com\u002Fmikepenz\u002FFastAdapter\u002Fblob\u002Fdevelop\u002Fapp\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fmikepenz\u002Ffastadapter\u002Fapp\u002FMultiTypeModelItemActivity.kt))\n- Chain other Adapters ([SimpleItemListSample](https:\u002F\u002Fgithub.com\u002Fmikepenz\u002FFastAdapter\u002Fblob\u002Fdevelop\u002Fapp\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fmikepenz\u002Ffastadapter\u002Fapp\u002FSimpleItemListActivity.kt), [StickyHeaderSample](https:\u002F\u002Fgithub.com\u002Fmikepenz\u002FFastAdapter\u002Fblob\u002Fdevelop\u002Fapp\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fmikepenz\u002Ffastadapter\u002Fapp\u002FStickyHeaderSampleActivity.kt))\n- Comes with useful Helpers\n - ActionModeHelper ([MultiselectSample](https:\u002F\u002Fgithub.com\u002Fmikepenz\u002FFastAdapter\u002Fblob\u002Fdevelop\u002Fapp\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fmikepenz\u002Ffastadapter\u002Fapp\u002FMultiselectSampleActivity.kt))\n - UndoHelper ([MultiselectSample](https:\u002F\u002Fgithub.com\u002Fmikepenz\u002FFastAdapter\u002Fblob\u002Fdevelop\u002Fapp\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fmikepenz\u002Ffastadapter\u002Fapp\u002FMultiselectSampleActivity.kt))\n- FastScroller (external lib) ([SimpleItemListSample](https:\u002F\u002Fgithub.com\u002Fmikepenz\u002FFastAdapter\u002Fblob\u002Fdevelop\u002Fapp\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fmikepenz\u002Ffastadapter\u002Fapp\u002FSimpleItemListActivity.kt))\n- Paging (via Jetpack paging lib) ([PagedActivity](https:\u002F\u002Fgithub.com\u002Fmikepenz\u002FFastAdapter\u002Fblob\u002Fdevelop\u002Fapp\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fmikepenz\u002Ffastadapter\u002Fapp\u002FPagedActivity.kt))\n - More to come...\n\n# Preview\n\n## Screenshots 🎉\n![Image](https:\u002F\u002Fraw.githubusercontent.com\u002Fmikepenz\u002FFastAdapter\u002Fdevelop\u002FDEV\u002Fgithub\u002Fscreenshots1.jpg)\n\n# Setup\n\n## Latest releases 🛠\n\n- Kotlin | [v5.7.0](https:\u002F\u002Fgithub.com\u002Fmikepenz\u002FFastAdapter\u002Ftree\u002Fv5.7.0)\n- [Deprecated] Java && AndroidX | [v3.3.1](https:\u002F\u002Fgithub.com\u002Fmikepenz\u002FFastAdapter\u002Ftree\u002Fv3.3.1)\n- [Deprecated] Java && AppCompat | [v3.2.9](https:\u002F\u002Fgithub.com\u002Fmikepenz\u002FFastAdapter\u002Ftree\u002Fv3.2.9)\n\n## Provide the gradle dependency\n\nThe library is split up into core, commons, and extensions. The core functions are included in the following dependency.\n```gradle\nimplementation \"com.mikepenz:fastadapter:${latestFastAdapterRelease}\"\nimplementation \"androidx.appcompat:appcompat:${androidX}\"\nimplementation \"androidx.recyclerview:recyclerview:${androidX}\"\n```\n\nExpandable support is included and can be added via this\n```gradle\nimplementation \"com.mikepenz:fastadapter-extensions-expandable:${latestFastAdapterRelease}\"\n```\n\nMany helper classes are included in the following dependency.\n```gradle\nimplementation \"com.mikepenz:fastadapter-extensions-binding:${latestFastAdapterRelease}\" \u002F\u002F view binding helpers\nimplementation \"com.mikepenz:fastadapter-extensions-diff:${latestFastAdapterRelease}\" \u002F\u002F diff util helpers\nimplementation \"com.mikepenz:fastadapter-extensions-drag:${latestFastAdapterRelease}\" \u002F\u002F drag support\nimplementation \"com.mikepenz:fastadapter-extensions-paged:${latestFastAdapterRelease}\" \u002F\u002F paging support\nimplementation \"com.mikepenz:fastadapter-extensions-scroll:${latestFastAdapterRelease}\" \u002F\u002F scroll helpers\nimplementation \"com.mikepenz:fastadapter-extensions-swipe:${latestFastAdapterRelease}\" \u002F\u002F swipe support\nimplementation \"com.mikepenz:fastadapter-extensions-ui:${latestFastAdapterRelease}\" \u002F\u002F pre-defined ui components\nimplementation \"com.mikepenz:fastadapter-extensions-utils:${latestFastAdapterRelease}\" \u002F\u002F needs the `expandable`, `drag` and `scroll` extension.\n\n\u002F\u002F required for the ui components and the utils\nimplementation \"com.google.android.material:material:${androidX}\"\n```\n\n## How to use\n### 1. Implement your item\n#### 1a. Implement your item as usual (the easy way)\nJust create a class which extends the `AbstractItem` as shown below. Implement the methods, and your item is ready.\n```kotlin\nopen class SimpleItem : AbstractItem\u003CSimpleItem.ViewHolder>() {\n    var name: String? = null\n    var description: String? = null\n\n    \u002F** defines the type defining this item. must be unique. preferably an id *\u002F\n    override val type: Int\n        get() = R.id.fastadapter_sample_item_id\n\n    \u002F** defines the layout which will be used for this item in the list *\u002F\n    override val layoutRes: Int\n        get() = R.layout.sample_item\n\n    override fun getViewHolder(v: View): ViewHolder {\n        return ViewHolder(v)\n    }\n\n    class ViewHolder(view: View) : FastAdapter.ViewHolder\u003CSimpleItem>(view) {\n        var name: TextView = view.findViewById(R.id.material_drawer_name)\n        var description: TextView = view.findViewById(R.id.material_drawer_description)\n\n        override fun bindView(item: SimpleItem, payloads: List\u003CAny>) {\n            name.text = item.name\n            description.text = item.name\n        }\n\n        override fun unbindView(item: SimpleItem) {\n            name.text = null\n            description.text = null\n        }\n    }\n}\n\n```\n\n#### 1b. Implement item with ViewBinding (the easiest way)\n\n```kotlin\nclass BindingIconItem : AbstractBindingItem\u003CIconItemBinding>() {\n    var name: String? = null\n\n    override val type: Int\n        get() = R.id.fastadapter_icon_item_id\n\n    override fun bindView(binding: IconItemBinding, payloads: List\u003CAny>) {\n        binding.name.text = name\n    }\n\n    override fun createBinding(inflater: LayoutInflater, parent: ViewGroup?): IconItemBinding {\n        return IconItemBinding.inflate(inflater, parent, false)\n    }\n}\n```\nUse the `binding` extension dependency in your application for this.\n\n### 2. Set the Adapter to the RecyclerView\n```kotlin\n\u002F\u002Fcreate the ItemAdapter holding your Items\nval itemAdapter = ItemAdapter\u003CSimpleItem>()\n\u002F\u002Fcreate the managing FastAdapter, by passing in the itemAdapter\nval fastAdapter = FastAdapter.with(itemAdapter)\n\n\u002F\u002Fset our adapters to the RecyclerView\nrecyclerView.setAdapter(fastAdapter)\n\n\u002F\u002Fset the items to your ItemAdapter\nitemAdapter.add(ITEMS)\n```\n\n### 3. Extensions\n\nBy default the `FastAdapter` only provides basic functionality, which comes with the abstraction of items as `Item` and `Model`. \nAnd the general functionality of adding\u002Fremoving\u002Fmodifying elements. To enable *selections*, or *expandables* the provided extensions need to be activated.\n\n#### 3.1. SelectExtension\n\n```kotlin\n\u002F\u002F Gets (or creates and attaches if not yet existing) the extension from the given `FastAdapter`\nval selectExtension = fastAdapter.getSelectExtension()\n\u002F\u002F configure as needed\nselectExtension.isSelectable = true\nselectExtension.multiSelect = true\nselectExtension.selectOnLongClick = false\n\u002F\u002F see the API of this class for more options.\n```\n\n#### 3.2. ExpandableExtension\n\n> This requires the `fastadapter-extensions-expandable` extension.\n\n```kotlin\n\u002F\u002F Gets (or creates and attaches if not yet existing) the extension.\nval expandableExtension = fastAdapter.getExpandableExtension()\n\u002F\u002F configure as needed\nexpandableExtension.isOnlyOneExpandedItem = true\n```\n\nFor further details scroll down to the `ExpandableItems` (under advanced usage) section.\n\n### 3. Click listener\n```kotlin\nfastAdapter.onClickListener = { view, adapter, item, position ->\n    \u002F\u002F Handle click here\n    false\n}\n```\n\n### 4. Click listeners for views inside your item\n```kotlin\n\u002F\u002F just add an `EventHook` to your `FastAdapter` by implementing either a `ClickEventHook`, `LongClickEventHook`, `TouchEventHook`, `CustomEventHook`\nfastAdapter.addEventHook(object : ClickEventHook\u003CSimpleImageItem>() {\n    override fun onBind(viewHolder: RecyclerView.ViewHolder): View? {\n        \u002F\u002Freturn the views on which you want to bind this event\n        return if (viewHolder is SimpleImageItem.ViewHolder) {\n            viewHolder.viewWhichReactsOnClick\n        } else {\n\t    null\n\t}\n    }\n\n    override fun onClick(v: View, position: Int, fastAdapter: FastAdapter\u003CSimpleImageItem>, item: SimpleImageItem) {\n        \u002F\u002Freact on the click event\n    }\n})\n```\n\n### 5. Filter \n\n```kotlin\n\u002F\u002F Call this in onQueryTextSubmit() & onQueryTextChange() when using SearchView\nitemAdapter.filter(\"yourSearchTerm\")\nitemAdapter.itemFilter.filterPredicate = { item: SimpleItem, constraint: CharSequence? ->\n    item.name?.text.toString().contains(constraint.toString(), ignoreCase = true)\n}\n```\n`filter()` should return true for items to be retained and false for items to be removed.\n\n### 6. Drag and drop\n\n> This requires the `fastadapter-extensions-drag` extension.\n\nFirst, attach `ItemTouchHelper` to RecyclerView.\n\n```kotlin\nval dragCallback = SimpleDragCallback()\nval touchHelper = ItemTouchHelper(dragCallback)\ntouchHelper.attachToRecyclerView(recyclerView)\n```\n\nImplement `ItemTouchCallback` interface in your Activity, and override the `itemTouchOnMove()` method.\n\n```kotlin\noverride fun itemTouchOnMove(oldPosition: Int, newPosition: Int): Boolean {\n    DragDropUtil.onMove(fastItemAdapter.itemAdapter, oldPosition, newPosition) \u002F\u002F change position\n    return true\n}\n```\n\n### 7. Using different ViewHolders (like HeaderView)\n\nStart by initializing your adapters:\n\n```kotlin\n\u002F\u002F Header is a model class for your header\nval headerAdapter = ItemAdapter\u003CHeader>()\n```\n\nInitialize a Model FastAdapter:\n\n```kotlin\nval itemAdapter = GenericItemAdapter()\n```\n\nFinally, set the adapter:\n\n```kotlin\nval fastAdapter: GenericFastAdapter = FastAdapter.with(headerAdapter, itemAdapter) \u002F\u002Fthe order defines in which order the items will show up\n\u002F\u002F alternative the super type of both item adapters can be used. e.g.:\nrecyclerView.setAdapter(fastAdapter)\n```\n\n### 8. Infinite (endless) scrolling\n\nCreate a FooterAdapter. We need this to display a loading ProgressBar at the end of our list. (Don't forget to pass it into `FastAdapter.with(..)`)\n\n```kotlin\nval footerAdapter = ItemAdapter\u003CProgressItem>()\n```\nKeep in mind that ProgressItem is provided by FastAdapter’s extensions.\n```kotlin\nrecyclerView.addOnScrollListener(object : EndlessRecyclerOnScrollListener(footerAdapter) {\n     override fun onLoadMore(currentPage: Int) {\n         footerAdapter.clear()\n         footerAdapter.add(ProgressItem())\n         \n\t \u002F\u002F Load your items here and add it to FastAdapter\n         itemAdapter.add(NEWITEMS)\n    }\n})\n```\n\nFor the complete tutorial and more features such as multi-select and CAB check out the [sample app](https:\u002F\u002Fgithub.com\u002Fmikepenz\u002FFastAdapter\u002Ftree\u002Fdevelop\u002Fapp).\n\n## Advanced Usage\n### Proguard\n* As of v2.5.0 there are no more known requirements to use the `FastAdapter` with Proguard\n\n### ExpandableItems\nThe `FastAdapter` comes with support for expandable items. After adding the dependency set up the `Expandable` extension via:\n\n```kotlin\nval expandableExtension = fastAdapter.getExpandableExtension()\n```\n\nExpandable items have to implement the `IExpandable` interface, and the sub items the `ISubItem` interface. This allows better support.\nThe sample app provides sample implementations of those. (Those in the sample are kept Model which allows them to be used with different parent \u002F subitems)\n\nAs of the way how `SubItems` and their state are handled it is highly recommended to use the `identifier` based `StateManagement`. Just add `withPositionBasedStateManagement(false)` to your `FastAdapter` setup.\n\nA simple item just needs to extend from the `AbstractExpandableItem` and provide the `ViewHolder` as type.\n```kotlin\nopen class SimpleSubExpandableItem : AbstractExpandableItem\u003CSimpleSubExpandableItem.ViewHolder>() {\n\n    \u002F**\n     * BASIC ITEM IMPLEMENTATION\n     *\u002F\n}\n```\n\u002F\u002F See the `SimpleSubExpandableItem.kt` of the sample application for more details.\n\n\n## Articles\n- [RecyclerView Adapter made easy](https:\u002F\u002Fblog.iamsuleiman.com\u002Frecyclerview-adapter-android-made-fast-easy\u002F) (FastAdapter v2.x)\n\n## Used by\nMike Penz:\n- AboutLibraries https:\u002F\u002Fgithub.com\u002Fmikepenz\u002FAboutLibraries\n- Android-Iconics https:\u002F\u002Fgithub.com\u002Fmikepenz\u002FAndroid-Iconics\n- ItemAnimators https:\u002F\u002Fgithub.com\u002Fmikepenz\u002FItemAnimators\n- MaterialDrawer https:\u002F\u002Fgithub.com\u002Fmikepenz\u002FMaterialDrawer\n\n\n# Developed By\n\n- Mike Penz\n  - [mikepenz.dev](https:\u002F\u002Fmikepenz.dev) - [blog.mikepenz.dev](https:\u002F\u002Fblog.mikepenz.dev) - \u003Cmikepenz@gmail.com>\n  - [paypal.me\u002Fmikepenz](http:\u002F\u002Fpaypal.me\u002Fmikepenz)\n  - [Automatic changelog generation action](https:\u002F\u002Fgithub.com\u002Fmarketplace\u002Factions\u002Frelease-changelog-builder)\n\n- Fabian Terhorst\n  - [github.com\u002FFabianTerhorst](https:\u002F\u002Fgithub.com\u002FFabianTerhorst) - \u003Cfabian.terhorst@gmail.com>\n  - [paypal.me\u002Ffabianterhorst](http:\u002F\u002Fpaypal.me\u002Ffabianterhorst)\n\n# Contributors\n\nThis free, open source software was also made possible by a group of volunteers that put many hours of hard work into it. See the [CONTRIBUTORS.md](CONTRIBUTORS.md) file for details.\n\n## Special mentions\n\nA special thanks to the very active contributors who added many improvements to this library.\n\n* **[Allan Wang](https:\u002F\u002Fgithub.com\u002FAllanWang)** \n* **[MFlisar](https:\u002F\u002Fgithub.com\u002FMFlisar)**\n* **[RobbWatershed](https:\u002F\u002Fgithub.com\u002FRobbWatershed)**\n\n# License\n\n    Copyright 2021 Mike Penz\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n       http:\u002F\u002Fwww.apache.org\u002Flicenses\u002FLICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n","FastAdapter 是一个用于简化 Android RecyclerView 适配器开发的库。它支持点击和长按监听、单选或多选功能，并且可以轻松实现可扩展项、拖放操作以及滑动删除等特性，全部使用 Kotlin 编写。该库通过减少开发者需要编写的代码量来提高开发效率，同时保持了高度的性能优化。FastAdapter 适用于任何需要高效且易于维护的列表视图的应用场景，特别是在需要复杂交互如多选、拖拽排序或数据过滤的情况下。",2,"2026-06-11 03:11:46","top_language"]