Home / Android-Entwicklung / Das Android Arsenal – Recycler Ansichten

Das Android Arsenal – Recycler Ansichten

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 (); 

.

About AndroidWeltEditor

Check Also

Common policy violations and how you can avoid them

By Andrew Ahn, Product Manager, Google Play App Safety At Google Play, we want to …

Leave a Reply

Your email address will not be published. Required fields are marked *