Codieren Sie niemals wieder einen Boilerplate RecyclerAdapter! Mit dieser Bibliothek können Sie Ihr Datenelement einfach und problemlos einem ViewHolder-Ziel zuordnen.
Schritt 1. Fügen Sie das JitPack-Repository zu Ihrer Build-Datei hinzu.
allprojects {
Repositories {
maven {url ' https://jitpack.io '
}
}
}
Schritt 2. Hinzufügen der Abhängigkeit
Abhängigkeiten {
Implementierung ' com.github.manneohlund: Smart-Recycler-Adapter: 2.0.1 '
}
Neu in SmartRecyclerAdapter
v2.0.0 ist die Unterstützung für verschachtelte Recycler-Adapter. Jetzt können Sie problemlos komplexe verschachtelte Adapter erstellen und haben die vollständige Kontrolle über den Adapter in Ihrer Ansicht, indem Sie Fragment
oder Aktivität
steuern. Verwenden Sie die neue create ()
-Methode anstelle der in (recyclerView)
um nur den SmartRecyclerAdapter
zu erstellen, und setzen Sie dann den Adapter auf die Recycler-Ansicht in Ihrem . ViewHolder
. Implementieren Sie einfach die Schnittstelle SmartAdapterHolder
in Ihrem ViewHolder
und SmartRecyclerAdapter
übernimmt das Mapping.
1. Erstellen Sie Ihren verschachtelten SmartRecyclerAdapter
SmartRecyclerAdapter myWatchListSmartMovieAdapter = SmartRecyclerAdapter
.items (myWatchListItems)
.map ( MovieModel . Klasse, ThumbViewHolder .
Klasse)
.addViewEventListener (
ThumbViewHolder .
Klasse,
R . id .
action_on_click,
(view, actionId, position) - >
playMovie ()
.create ();
2. MyWatchListSmartMovieAdapter mit MyWatchListViewHolder zuordnen
SmartRecyclerAdapter
.items (items)
.map ( MoviePosterModel . Klasse, PosterViewHolder .
Klasse)
.map ( MyWatchListModel . Klasse, MyWatchListViewHolder .
Klasse)
.map ( MyWatchListViewHolder .
Klasse, myWatchListSmartMovieAdapter)
.in (recyclerView);
3. MyWatchListSmartMovieAdapter zu MyWatchListViewHolder zuordnen
Klasse MyWatchListViewHolder
erweitert SmartAutoEventViewHolder < MyWatchListModel >
{Implementiert.
// Konstruktor hier
@Override
public void setSmartRecyclerAdapter ( SmartRecyclerAdapter
smartRecyclerAdapter] {19459
recyclerView . setLayoutManager (LinearLayoutManager (recyclerView . context, HORIZONTAL false
);
recyclerView . adapter = ( RecyclerView . Adapter
) smartRecyclerAdapter;
}
public void bind ( MyWatchListModel
myWatchListModel) {
// Modelldaten an Ansichten binden
}
}
Grundlegende Adaptererstellung
SmartRecyclerAdapter
.items (items)
.map ( MoviePosterModel . Klasse, PosterViewHolder .
Klasse)
.map ( MovieBannerModel . Klasse, BannerViewHolder .
Klasse)
.map ( TopNewsModel . Klasse, TopNewsViewHolder .
Klasse)
.into (recyclerView);
ViewHolder
Erweitern Sie einfach Ihre ViewHolder-Klasse mit SmartViewHolder und übergeben Sie den Zieltyp ex SmartViewHolder
. Beachten Sie, dass der Konstruktor "The parentView" als Parameter "recyclerView" verwenden muss.
ViewGroup ", in diesem Fall" PosterViewHolder (ViewGroup parentView) ".
Funktioniert mit Android DataBinding! Fügen Sie einfach den DataBinding LayoutInflater in super
call hinzu. 🚀
öffentliche Klasse PosterViewHolder erweitert SmartViewHolder < MoviePosterModel >
{
public PostViewHolder ( ViewGroup parentView
) {
super ( LayoutInflater . from (parentView . getContext ()) . inflate ( R . layout . poster_view, parentView, false
));
}
@Override
public void bind ( MoviePosterModel model
) {
Gleiten .
mit (imageView)
.load (model .
icon)
.in (imageView);
}
}
Ereignis-Listener anzeigen
Sie können den Ansichten auf einfache Weise Ereignisse zuweisen und dem SmartRecyclerAdapter einen ViewEventListener
zur einfachen Handhabung hinzufügen. Sie müssen Ihren ViewHolder mit
SmartEventViewHolder erweitern.
SmartRecyclerAdapter
.items (items)
.map ( MovieModel . Klasse, MovieViewHolder .
Klasse)
// Sie müssen Ihre eigenen Ansichtsereignis-Listener wie onClickListener für eine Ansicht definieren.
.addViewEventListener ((view, actionId, position) - >
handleItemEvent ())
// Fügt einen Ereignis-Listener nur für MovieViewHolder hinzu.
.addViewEventListener ( MovieViewHolder . Klasse, (Ansicht, Aktions-ID, Position) - >
handleItemEvent ()
.into (recyclerView);
Fügen Sie in Ihrem Ansichtsinhaber zB OnClickListener
zu einer Ansicht hinzu und rufen Sie notifyOnItemEvent
auf. Ihr ViewHolder muss erweitert werden
SmartEventViewHolder.
Klasse MovieViewHolder erweitert sich SmartEventViewHolder < MovieModel >
{
@Override
public void bind ( MovieModel movieModel
) {
imageView . setOnClickListener (Ansicht - > notifyOnItemEvent (Ansicht, R . id action_movie].
}
}
Wenn Sie faul sind und automatisch einen vordefinierten onClickListener
und onLongClickListener
mit actionIds R.id.action_on_click
und R.id zuweisen möchten .action_on_long_click
verlängern Sie einfach Ihren ViewHolder
mit SmartAutoEventViewHolder
Fügen Sie den Ereignis-Listener zum Builder SmartRecyclerAdapter
hinzu.
SmartRecyclerAdapter
.items (items)
.map ( MovieModel . Klasse, MovieViewHolder .
Klasse)
// / Fügt einen Ereignis-Listener für MovieViewHolder hinzu und fügt View.OnClickListener mit der Aktion R.id.action_on_click bei Anzeige mit der ID R.id.info_button hinzu.
.addViewEventListener ( MovieViewHolder .
Klasse,
R . id .
info_button,
R . id .
action_on_click,
(view, actionId, position) - >
openMovieInfo ()
.into (recyclerView);
Adaptererstellung mit ViewTypeResolver
Wenn Sie einen Datentyp abhängig von einem Attribut mit verschiedenen Ansichtshaltern binden möchten, können Sie einen ViewTypeResolver festlegen. Hinweis In diesem Fall ist der Aufruf von .map () nicht erforderlich. Sie können jedoch kombinieren, wenn Sie möchten. Sie können auch einen OnViewDetachedFromWindowListener für die sofortige Handhabung des Ablösens von Ansichten festlegen.
SmartRecyclerAdapter
.items (items)
.setViewTypeResolver ((Element, Position) - >
{
if (item instanceof MovieTrailerModel
) {
return MovieTrailerViewHolder .
class;
} else if (item instanceof MovieModel && (( MovieModel item)
isRatedR ( )) {
return RMovieViewHolder .
class;
} return MovieViewHolder . class; // Fügen Sie bei Bedarf eine Standardansicht hinzu. Andernfalls überprüft SmartRecyclerAdapter die Basiszuordnung `.map`.
})
.setOnViewDetachedFromWindowListener (Inhaber - >
{
if (Inhaber Instanz von ImageViewHolder
) {
ImageCacheManager . getInstance () .
cancelAsyncTask (Inhaber);
}
})
.into (recyclerView);
Weitere SmartRecyclerAdapter-Funktionen
SmartRecyclerAdapter Adapter = SmartRecyclerAdapter
.items (items)
.map ( MovieModel . Klasse, MovieViewHolder .
Klasse)
.in (recyclerView);
// Wir können weitere Daten hinzufügen
Adapter .
addItems (items);
// Daten mit Animation zum Index hinzufügen
Adapter . addItem ( 0
item);
// Daten ohne Animation zum Index hinzufügen
Adapter . addItem ( 0 item, false
);
// Artikel im Inhaltsverzeichnis mit Animation entfernen
Adapter . removeItem ( 0
);
// Artikel im Inhaltsverzeichnis ohne Animation entfernen
Adapter . removeItem ( 0 false
);
// Indexelement durch Animation ersetzen
Adapter . replaceItem ( 0
item);
// Artikel im Index ohne Animation ersetzen
Adapter . replaceItem ( 0 item, false
);
// Artikel nach Typ abrufen
Adapter . getItems ( MovieModel .
Klasse);
// Alle Einträge in der Liste löschen
adapter . clear ();