FastAdapter موجود هنا لتبسيط إنشاء محولات لعمليات RecyClerviews. لا تقلق بشأن المحول بعد الآن. فقط اكتب المنطق لكيفية أن تبدو طريقة العرض/العنصر الخاص بك ، وقد انتهيت. إنه أمر سريع الحرق ، مما يقلل من الكود الذي تحتاجه إلى الكتابة ، ويسهل تمديده.
ما الذي يتم تضمينه • الإعداد • دليل الترحيل؟ • يستخدمه • نموذج التطبيق
يتم تقسيم المكتبة إلى جوهر ، المشاعات ، والملحقات. يتم تضمين الوظائف الأساسية في التبعية التالية.
implementation " com.mikepenz:fastadapter: ${ latestFastAdapterRelease } "
implementation " androidx.appcompat:appcompat: ${ androidX } "
implementation " androidx.recyclerview:recyclerview: ${ androidX } "يتم تضمين الدعم القابل للتوسيع ويمكن إضافته من خلال هذا
implementation " com.mikepenz:fastadapter-extensions-expandable: ${ latestFastAdapterRelease } "يتم تضمين العديد من فصول المساعدة في التبعية التالية.
implementation " com.mikepenz:fastadapter-extensions-binding: ${ latestFastAdapterRelease } " // view binding helpers
implementation " com.mikepenz:fastadapter-extensions-diff: ${ latestFastAdapterRelease } " // diff util helpers
implementation " com.mikepenz:fastadapter-extensions-drag: ${ latestFastAdapterRelease } " // drag support
implementation " com.mikepenz:fastadapter-extensions-paged: ${ latestFastAdapterRelease } " // paging support
implementation " com.mikepenz:fastadapter-extensions-scroll: ${ latestFastAdapterRelease } " // scroll helpers
implementation " com.mikepenz:fastadapter-extensions-swipe: ${ latestFastAdapterRelease } " // swipe support
implementation " com.mikepenz:fastadapter-extensions-ui: ${ latestFastAdapterRelease } " // pre-defined ui components
implementation " com.mikepenz:fastadapter-extensions-utils: ${ latestFastAdapterRelease } " // needs the `expandable`, `drag` and `scroll` extension.
// required for the ui components and the utils
implementation " com.google.android.material:material: ${ androidX } " فقط قم بإنشاء فصل يمتد إلى AbstractItem كما هو موضح أدناه. تنفيذ الأساليب ، والبند الخاص بك جاهز.
open class SimpleItem : AbstractItem < SimpleItem . ViewHolder >() {
var name : String? = null
var description : String? = null
/* * defines the type defining this item. must be unique. preferably an id */
override val type : Int
get() = R .id.fastadapter_sample_item_id
/* * defines the layout which will be used for this item in the list */
override val layoutRes : Int
get() = R .layout.sample_item
override fun getViewHolder ( v : View ): ViewHolder {
return ViewHolder (v)
}
class ViewHolder ( view : View ) : FastAdapter.ViewHolder<SimpleItem>(view) {
var name : TextView = view.findViewById( R .id.material_drawer_name)
var description : TextView = view.findViewById( R .id.material_drawer_description)
override fun bindView ( item : SimpleItem , payloads : List < Any >) {
name.text = item.name
description.text = item.name
}
override fun unbindView ( item : SimpleItem ) {
name.text = null
description.text = null
}
}
}
class BindingIconItem : AbstractBindingItem < IconItemBinding >() {
var name : String? = null
override val type : Int
get() = R .id.fastadapter_icon_item_id
override fun bindView ( binding : IconItemBinding , payloads : List < Any >) {
binding.name.text = name
}
override fun createBinding ( inflater : LayoutInflater , parent : ViewGroup ? ): IconItemBinding {
return IconItemBinding .inflate(inflater, parent, false )
}
} استخدم تبعية ملحق binding في طلبك لهذا.
// create the ItemAdapter holding your Items
val itemAdapter = ItemAdapter < SimpleItem >()
// create the managing FastAdapter, by passing in the itemAdapter
val fastAdapter = FastAdapter . with (itemAdapter)
// set our adapters to the RecyclerView
recyclerView.setAdapter(fastAdapter)
// set the items to your ItemAdapter
itemAdapter.add( ITEMS ) بشكل افتراضي ، توفر FastAdapter وظائف أساسية فقط ، والتي تأتي مع تجريد العناصر Item Model . والوظيفة العامة لإضافة/إزالة/تعديل العناصر. لتمكين التحديدات ، أو توسيع نطاق الإضافات المتوفرة يجب تنشيطها.
// Gets (or creates and attaches if not yet existing) the extension from the given `FastAdapter`
val selectExtension = fastAdapter.getSelectExtension()
// configure as needed
selectExtension.isSelectable = true
selectExtension.multiSelect = true
selectExtension.selectOnLongClick = false
// see the API of this class for more options. وهذا يتطلب امتداد
fastadapter-extensions-expandable.
// Gets (or creates and attaches if not yet existing) the extension.
val expandableExtension = fastAdapter.getExpandableExtension()
// configure as needed
expandableExtension.isOnlyOneExpandedItem = true لمزيد من التفاصيل ، قم بالتمرير لأسفل إلى قسم ExpandableItems (تحت الاستخدام المتقدم).
fastAdapter.onClickListener = { view, adapter, item, position ->
// Handle click here
false
} // just add an `EventHook` to your `FastAdapter` by implementing either a `ClickEventHook`, `LongClickEventHook`, `TouchEventHook`, `CustomEventHook`
fastAdapter.addEventHook( object : ClickEventHook < SimpleImageItem >() {
override fun onBind ( viewHolder : RecyclerView . ViewHolder ): View ? {
// return the views on which you want to bind this event
return if (viewHolder is SimpleImageItem . ViewHolder ) {
viewHolder.viewWhichReactsOnClick
} else {
null
}
}
override fun onClick ( v : View , position : Int , fastAdapter : FastAdapter < SimpleImageItem >, item : SimpleImageItem ) {
// react on the click event
}
}) // Call this in onQueryTextSubmit() & onQueryTextChange() when using SearchView
itemAdapter.filter( " yourSearchTerm " )
itemAdapter.itemFilter.filterPredicate = { item : SimpleItem , constraint : CharSequence? ->
item.name?.text.toString().contains(constraint.toString(), ignoreCase = true )
} يجب أن يعود filter() إلى العناصر المراد الاحتفاظ بها وكاذبة للعناصر المراد إزالة العناصر.
هذا يتطلب امتداد
fastadapter-extensions-drag.
أولاً ، قم بإرفاق ItemTouchHelper إلى RecyClerview.
val dragCallback = SimpleDragCallback ()
val touchHelper = ItemTouchHelper (dragCallback)
touchHelper.attachToRecyclerView(recyclerView) قم بتنفيذ واجهة ItemTouchCallback في نشاطك ، وتجاوز طريقة itemTouchOnMove() .
override fun itemTouchOnMove ( oldPosition : Int , newPosition : Int ): Boolean {
DragDropUtil .onMove(fastItemAdapter.itemAdapter, oldPosition, newPosition) // change position
return true
}ابدأ بتهيئة محولاتك:
// Header is a model class for your header
val headerAdapter = ItemAdapter < Header >()تهيئة نموذج FastAdapter:
val itemAdapter = GenericItemAdapter ()أخيرًا ، قم بتعيين المحول:
val fastAdapter : GenericFastAdapter = FastAdapter . with (headerAdapter, itemAdapter) // the order defines in which order the items will show up
// alternative the super type of both item adapters can be used. e.g.:
recyclerView.setAdapter(fastAdapter) إنشاء تذييل. نحتاج إلى هذا لعرض شريط التحميل في نهاية قائمتنا. (لا تنس أن تمريرها إلى FastAdapter.with(..) )
val footerAdapter = ItemAdapter < ProgressItem >()ضع في اعتبارك أن ProgressItem يتم توفيره بواسطة ملحقات FastAdapter.
recyclerView.addOnScrollListener( object : EndlessRecyclerOnScrollListener (footerAdapter) {
override fun onLoadMore ( currentPage : Int ) {
footerAdapter.clear()
footerAdapter.add( ProgressItem ())
// Load your items here and add it to FastAdapter
itemAdapter.add( NEWITEMS )
}
})للحصول على البرنامج التعليمي الكامل والمزيد من الميزات مثل الاختيار المتعدد وكابينة تحقق من تطبيق العينة.
FastAdapter مع proguard يأتي FastAdapter مع دعم للعناصر القابلة للتوسيع. بعد إضافة التبعية قم بإعداد التمديد Expandable عبر:
val expandableExtension = fastAdapter.getExpandableExtension() يجب على العناصر القابلة للتوسيع تنفيذ واجهة IExpandable ، والعناصر الفرعية واجهة ISubItem . هذا يسمح بدعم أفضل. يوفر تطبيق العينة تطبيقات عينة من هؤلاء. (يتم الاحتفاظ بتلك الموجودة في العينة والتي تسمح باستخدامها مع مختلف الوالدين / الفرعية)
اعتبارًا من الطريقة التي يتم بها التعامل SubItems وحالتها ، يوصى بشدة باستخدام StateManagement القائمة على identifier . فقط أضف withPositionBasedStateManagement(false) إلى إعداد FastAdapter الخاص بك.
يحتاج عنصر بسيط فقط إلى التمدد من AbstractExpandableItem وتزويد ViewHolder كنوع.
open class SimpleSubExpandableItem : AbstractExpandableItem < SimpleSubExpandableItem . ViewHolder >() {
/* *
* BASIC ITEM IMPLEMENTATION
*/
} // راجع SimpleSubExpandableItem.kt من تطبيق العينة لمزيد من التفاصيل.
مايك بينز:
مايك بينز
فابيان تيرهورست
أصبح هذا البرنامج المجاني المفتوح المصدر ممكنًا أيضًا من قبل مجموعة من المتطوعين الذين يضعون ساعات طويلة من العمل الشاق فيه. راجع ملف المساهمين. md للحصول على التفاصيل.
شكر خاص للمساهمين النشطين للغاية الذين أضافوا العديد من التحسينات على هذه المكتبة.
Copyright 2021 Mike Penz
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.