Der Fastadapter ist hier, um das Erstellen von Adaptern für Recyclerviews zu vereinfachen. Mach dir keine Sorgen mehr um den Adapter. Schreiben Sie einfach die Logik, wie Ihre Ansicht/Ihr Element aussehen sollte, und Sie sind fertig. Es leuchtet schnell und minimiert den Code, den Sie schreiben müssen, und ist leicht zu erweitern.
Was ist enthalten • Setup • Migrationshandbuch? • verwendet von • Beispiel -App
Die Bibliothek ist in Kern, Commons und Erweiterungen aufgeteilt. Die Kernfunktionen sind in der folgenden Abhängigkeit enthalten.
implementation " com.mikepenz:fastadapter: ${ latestFastAdapterRelease } "
implementation " androidx.appcompat:appcompat: ${ androidX } "
implementation " androidx.recyclerview:recyclerview: ${ androidX } "Die erweiterbare Unterstützung ist enthalten und kann darüber hinzugefügt werden
implementation " com.mikepenz:fastadapter-extensions-expandable: ${ latestFastAdapterRelease } "Viele Helferklassen sind in der folgenden Abhängigkeit enthalten.
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 } " Erstellen Sie einfach eine Klasse, die das AbstractItem wie unten gezeigt erweitert. Implementieren Sie die Methoden und Ihr Artikel ist fertig.
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 )
}
} Verwenden Sie die binding -Erweiterungsabhängigkeit in Ihrer Anwendung dafür.
// 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 ) Standardmäßig liefert der FastAdapter nur grundlegende Funktionen, die mit der Abstraktion von Elementen als Item und Model geliefert werden. Und die allgemeine Funktionalität beim Hinzufügen/Entfernen/Ändern von Elementen. Um Auswahlen zu aktivieren oder zu erweitern , müssen die bereitgestellten Erweiterungen aktiviert werden.
// 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. Dies erfordert die
fastadapter-extensions-expandableErweiterung.
// Gets (or creates and attaches if not yet existing) the extension.
val expandableExtension = fastAdapter.getExpandableExtension()
// configure as needed
expandableExtension.isOnlyOneExpandedItem = true Für weitere Details scrollen Sie in den Abschnitt ExpandableItems (unter fortgeschrittenem Gebrauch).
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() sollte die TRUE zurückgeben, damit Elemente beibehalten und falsch sind, damit Elemente entfernt werden.
Dies erfordert die Erweiterung der
fastadapter-extensions-drag.
Fügen Sie zunächst ItemTouchHelper an Recyclerview bei.
val dragCallback = SimpleDragCallback ()
val touchHelper = ItemTouchHelper (dragCallback)
touchHelper.attachToRecyclerView(recyclerView) Implementieren Sie ItemTouchCallback -Schnittstelle in Ihrer Aktivität und überschreiben Sie die Methode itemTouchOnMove() .
override fun itemTouchOnMove ( oldPosition : Int , newPosition : Int ): Boolean {
DragDropUtil .onMove(fastItemAdapter.itemAdapter, oldPosition, newPosition) // change position
return true
}Beginnen Sie mit der Initialisierung Ihrer Adapter:
// Header is a model class for your header
val headerAdapter = ItemAdapter < Header >()Initialisieren Sie ein Modell Fastadapter:
val itemAdapter = GenericItemAdapter ()Stellen Sie den Adapter schließlich fest:
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) Erstellen Sie einen Fußzeilchen. Wir müssen dies am Ende unserer Liste eine Ladeprogressleiste anzeigen. (Vergessen Sie nicht, es in FastAdapter.with(..) )
val footerAdapter = ItemAdapter < ProgressItem >()Denken Sie daran, dass ProgressItem durch die Erweiterungen von Fastadapter bereitgestellt wird.
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 )
}
})Für das komplette Tutorial und weitere Funktionen wie Multi-Select und CAB finden Sie die Beispiel-App.
FastAdapter mit Proguard zu verwenden Der FastAdapter wird Unterstützung für erweiterbare Elemente geliefert. Nach dem Hinzufügen der Abhängigkeit die Expandable Erweiterung über:
val expandableExtension = fastAdapter.getExpandableExtension() Erweiterbare Elemente müssen die IExpandable -Schnittstelle und die Subelemente der ISubItem -Schnittstelle implementieren. Dies ermöglicht eine bessere Unterstützung. Die Beispiel -App enthält Beispielimplementierungen dieser. (Diejenigen in der Probe werden ein Modell aufbewahrt, mit dem sie mit verschiedenen Eltern / Subitems verwendet werden können)
In der Art und Weise, wie SubItems und ihr Staat behandelt werden, wird es dringend empfohlen, die identifier StateManagement zu verwenden. Fügen Sie Ihr FastAdapter -Setup einfach withPositionBasedStateManagement(false) hinzu.
Ein einfaches Element muss sich nur vom AbstractExpandableItem aus erstrecken und dem ViewHolder als Typ bereitstellen.
open class SimpleSubExpandableItem : AbstractExpandableItem < SimpleSubExpandableItem . ViewHolder >() {
/* *
* BASIC ITEM IMPLEMENTATION
*/
} // Weitere Informationen finden Sie im SimpleSubExpandableItem.kt der Beispielanwendung.
Mike Penz:
Mike Penz
Fabian Terhorst
Diese kostenlose Open -Source -Software wurde auch von einer Gruppe von Freiwilligen ermöglicht, die viele Stunden harte Arbeit in die Länge bringen. Weitere Informationen finden Sie in der Datei Mitwirkende.md -Datei.
Ein besonderer Dank geht an die sehr aktiven Mitwirkenden, die dieser Bibliothek viele Verbesserungen aufgenommen haben.
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.