Home / Android-Entwicklung / Das Android Arsenal – Ansichtsadapter

Das Android Arsenal – Ansichtsadapter

OneAdapter wurde entwickelt, um die Verwendung des RecyclerView-Adapters zu vereinfachen und zu verbessern und gleichzeitig häufige Fehler zu vermeiden. Bei mehreren Modulen und Hooks müssen Sie sich nicht mehr mit dem Schreiben eines Adapters befassen und sich nur noch darauf konzentrieren, worauf es ankommt.

Um zu verstehen, warum ich diese Bibliothek geschrieben habe und welche Anwendungsfälle sie am besten löst, lesen Sie bitte Mein mittlerer Beitrag: https://medium.com/@idanatsmon/adapting-your-recyclerview-the-2019-approach-e47edf2fc4f3[19659003‹Features:[19659004‹ModularerAnsatzfürmehrwiederverwendbarenundtestbarenCode

  • Built-in Unterstützung für DiffUtil (mit Diffable)
  • Optimierte Leistung – Interne Verarbeitung auf einem Hintergrund-Thread
  • 100% in Kotlin geschrieben
  • Module:
  • Ereignis-Hooks:
  •  Abhängigkeiten {
      Implementierung  " com.ironsource.aura.oneadapter: oneadapter:  $ { LATEST_VERSION } " 
    
    } 

    Beispiel

    Sie können es ausprobieren das Beispielprojekt, das die grundlegende und erweiterte Verwendung sowohl in Java als auch in Kotlin umfasst.

    Screenshots

    Grundsätzliche Verwendung

    1. Artikelmodul implementieren

    Artikelmodule werden zum Erstellen und Binden aller ViewHolders für Sie verwendet. In der onBind-Methode erhalten Sie als Parameter das dieser Ansicht zugeordnete Modell und eine ViewBinder-Klasse, mit der Sie die in der zugeordneten Layoutdatei definierten Ansichten finden (und zwischenspeichern) können.

    Java
     Klasse  MessageModule  erweitert  ItemModule < MessageModel > 
     {
           @NotNull  @Override 
     public  ItemModuleConfig  provisionModuleConfig 
     () {
               return  new  ItemModuleConfig 
     () {
                   @Override 
     public  int  withLayoutResource  () { return  R .  layout . 
    
    
    
     message_model; }
              };
          }
    
           @Override 
     public  void  onBind  ( @NotNull  MessageModel  model  @NotNull  ViewB viewBinder 
    ) {
               TextView  title  =  viewBinder .  findViewById ( R .  id . 
     title);
              title .  setText (model . 
    
    
     title);
          }
        
          @Override 
     public  void  onUnbind  ( @NotNull  ViewBinder  viewBinder 
    ) {
               //  Logik wie Animation anhalten, Webview-Ressourcen freigeben usw. 
    
    
          }
    } 
    Kotlin
     Klasse  MessageModule :  ItemModule  < MessageModel 
    > () {
         Überschreiben  Spaß  ProvideModuleConfig  ()  =  Objekt :  ItemModuleConfig 
     () {
             Überschreiben  Spaß  mitLayoutResource  ()  =  R 
    
    
     .layout.message_model
        }
    
         überschreiben  Spaß  onBind  ( Modell :  MessageModel  viewBinder :  ViewBinder 
    
             val  title  =  viewBinder.findViewById < TextView > ( R 
     .id.title)
            title.text  = 
    
    
     model.title
        }
    
         überschreiben  Spaß  auf Unbind  ( viewBinder :  ViewBinder 
    ) {
             //  Logik wie Animation anhalten, Webview-Ressourcen freigeben usw. 
    
    
        }
    } 

    2. Implement Diffable

    Der Adapter berechnet die Differenz zwischen den aktuellen Daten und den geänderten Daten in einem Hintergrundthread und sendet das Ergebnis an den Hauptthread. Damit diese Magie funktioniert, ohne Tonnen von DiffUtil.Callback zu schreiben, müssen Ihre Modelle eine einfache Schnittstelle implementieren:

    Java
     public  class  MessageModel  implementiert  Diffable 
     {
         privat  int 
     id;
         privater  String 
    
     Titel;
    
         @Override 
     public  long  getUniqueIdentifier 
     () {
             return 
    
    
     id;
        }
    
         @Override 
     public  boolean  areContentTheSame  ( @NonNull  Object  other 
    ) {
             return  other  instanceof  MessageModel  &&  title .  equals ((( MessageModel  other) . 
    
     Titel);
        }
    } 
    Kotlin
     Klasse  MessageModel :  Diffable 
     {
         privat  val  id :  Int  =  0 
     privat  val  title : String? [19659024]  = null 
    
     überschreiben  Spaß  getUniqueIdentifier  () :  Long  = 
     id.toLong ()
         überschreiben  Spaß  areContentTheSame  ( other :  any ) :  Boolean  =  other  ] lautet  MessageModel  &&  title  == 
     other.title
    } 

    3. An einen Adapter anhängen und verwenden

    Java
     OneAdapter  oneAdapter  =  new  OneAdapter 
     ()
        .attachItemModule ( neu  MessageModule 
    
    
     ())
        .attachTo (recyclerView);
        
    oneAdapter .  setItems ( ... ) 
    Kotlin
     val  oneAdapter  =  oneAdapter 
     ()
        .attachItemModule ( MessageModule 
    
    
     ())
        .attachTo (recyclerView);
        
    oneAdapter.setItems (...) 

    Erweiterte Verwendung

    Mehrere Typen

    Haben Sie mehr als einen Ansichtstyp? Kein Problem, erstellen Sie einfach ein weiteres ItemModule und hängen Sie es auf die gleiche Weise an OneAdapter an.

    1. Implementieren mehrerer Elementmodule

     Klasse  MessageModule  erweitert  ItemModule < MessageModel >  { ... 
     }
     Klasse  StoryModule  erweitert  ItemModule < StoryModel >  { ...  } 

    2. An einen Adapter anhängen

     OneAdapter  oneAdapter  =  neu  OneAdapter 
     ()
        .attachItemModule ( neu  MessageModule 
     ())
        .attachItemModule ( neu  StoryModule 
     ())
         ... 

    Paging-Modul

    Das Paging-Modul wird zum Erstellen und Binden eines bestimmten ViewHolders am Ende der Liste verwendet, wenn der Adapter den Status "Mehr laden" erreicht. Die Konfiguration des sichtbaren Schwellenwerts wird verwendet, um anzugeben, wie viele Elemente vor dem Ende der Liste der onLoadMore-Rückruf aufgerufen werden soll.

    1. Implementieren von Paging-Modulen

    Java
     -Klasse  PagingModuleImpl  erweitert  PagingModule 
     {
         @NotNull  @Override 
     public  PagingModuleConfig  provisionModuleConfig 
     () {
             return  new  PagingModuleConfig 
     () {
                 @Override 
     public  int  withLayoutResource  () { return  R .  layout .  load_more; }  //  kann eine Lade-Animation sein. 
    
     @Override 
     public  int  withVisibleThreshold  () { return  3 ; }  //  onLoadMore 3 Elemente vor dem Ende aufrufen. 
    
    
    
    
            };
        }
    
         @Override 
     public  void  onLoadMore  ( int  currentPage 
    ) {
             //  Fügen Sie hier mehr Logik zum Laden ein, z. B. bitten Sie das ViewModel, die nächste Datenseite zu laden. 
    
    
        }
    } 
    Kotlin
     Klasse  PagingModuleImpl :  PagingModule 
     () {
         Überschreiben  Spaß  ProvideModuleConfig  ()  =  Objekt :  PagingModuleConfig 
     () {
             Überschreiben  Spaß  mitLayoutResource  ()  =  R  .layout.load_more  //  Überschreiben 
     19659024] Spaß  mitVisibleThreshold  ()  =  3  //  onLoadMore 3 Elemente vor dem Ende aufrufen 
    
    
    
        }
    
         überschreiben  Spaß  auf LoadMore  ( aktuelle Seite :  Int 
    ) {
             //  Fügen Sie hier mehr Logik zum Laden ein, z. B. bitten Sie das ViewModel, die nächste Datenseite zu laden. 
    
    
        }
    } 

    2. An einen Adapter anhängen

    Java
     OneAdapter  oneAdapter  =  new  OneAdapter 
     ()
        .attachPagingModule ( neu  PagingModuleImpl 
     ())
         ... 
    Kotlin
     val  oneAdapter  =  OneAdapter 
     ()
        .attachPagingModule ( PagingModuleImpl 
     ())
        ... 

    Leermodul

    Das Leermodul wird zum Erstellen und Binden eines bestimmten ViewHolders verwendet, wenn der Adapter keine zu rendernden Daten enthält.

    1. Implementieren von Leermodulen

    Java
     -Klasse  EmptinessModuleImpl  Erweitert  EmptinessModule 
     {
         @NotNull  @Override 
     public  EmptinessModuleConfig  provisionModuleConfig 
     () {
             return  new  EmptinessModuleConfig 
     () {
                 @Override 
     public  int  withLayoutResource  () { return  R .  layout . 
    
    
    
     empty_state; }
            };
        }
    
         @Override 
     public  void  onBind  ( @NotNull  ViewBinder  viewBinder ) { ... 
    
     }
    
         @Override 
     public  void  onUnbind  ( @NotNull  ViewBinder  viewBinder ) { ... 
     }
    } 
    Kotlin
     Klasse  EmptinessModuleImpl :  EmptinessModule 
     () {
         Überschreiben  Spaß  Zur Verfügung stellen von ModuleConfig  () :  Leeren von ModuleConfig  =  Objekt : 
    Leeren von ModuleConfig [194599023] 
    
             Überschreiben  Spaß  mitLayoutResource  ()  =  R 
    
    
     .layout.empty_state
        }
    
         überschreiben  Spaß  onBind  ( viewBinder :  ViewBinder 
    
    ) {...}
    
         überschreiben  Spaß  onUnbind  ( viewBinder :  ViewBinder 
    ) {...}
    } 

    2. An einen Adapter anhängen

    Java
     OneAdapter  oneAdapter  =  new  OneAdapter 
     ()
        .attachEmptinessModule ( neu  EmptinessModuleImpl 
     ())
         ... 
    Kotlin
     val  oneAdapter  =  OneAdapter 
     ()
        .attachEmptinessModule ( EmptinessModuleImpl 
     ())
        ... 

    Auswahlmodul

    Das Auswahlmodul ermöglicht die einfache oder mehrfache Auswahl von Elementen.

    1. Implementieren von Auswahlmodulen

    Java
     -Klasse  ItemSelectionModuleImpl  erweitert  ItemSelectionModule 
     {
         @NotNull  @Override 
     public  ItemSelectionModuleConfig  provisionModuleConfig 
     () {
             return  new  ItemSelectionModuleConfig 
     () {
                 @NotNull  @Override 
     public  SelectionType  withSelectionType  () { return  SelectionType ;  Multiple . }  //  Oder SelectionType.Single. 
    
    
    
    
            };
        }
    
         @Override 
     public  void  onSelectionUpdated  ( int  selectedCount 
    ) {
            //  Platzieren Sie hier Ihre allgemeine Auswahllogik, z. B. indem Sie den Text der Symbolleiste ändern, um die ausgewählte Anzahl anzuzeigen. 
    
    
        }
    } 
    Kotlin
     Klasse  ItemSelectionModuleImpl :  ItemSelectionModule 
     () {
         Überschreiben  Spaß  Zur Verfügung stellen von ModuleConfig  () :  ItemSelectionModuleConfig  =  Objekt : 
     ItemSelectionModuleConfig9015
             überschreiben  Spaß  mit SelectionType  ()  =  SelectionType .  Mehrfach  //  oder SelectionType.Single 
    
    
     ]
        }
    
         überschreiben  Spaß  beiAuswahlaktualisiert  ( selectedCount :  Int 
    ) {
             //  Platzieren Sie hier Ihre allgemeine Auswahllogik, z. B. indem Sie den Text der Symbolleiste ändern, um die ausgewählte Anzahl anzuzeigen. 
    
    
        }
    } 

    2. Implementiere Auswahlstatus

    Java
    Kotlin
     Klasse  SelectionStateImpl :  SelectionState  < MessageModel 
    > () {
         überschreiben  Spaß  Auswahl aktiviert  ( Modell :  MessageModel )  =  wahr 
    
     überschreiben  Spaß  ] onSelected  ( Modell :  MessageModel  ausgewählt :  Boolean 
    ) {
             //  aktualisieren Sie Ihr Modell hier. 
    
             //  Gleich nach diesem Aufruf erhalten Sie einen onBind-Aufruf, um Ihre Änderungen am jeweiligen Item-Modul wiederzugeben. 
    
            model.isSelected  = 
    
     ausgewählt;
        }
    } 

    3. An ItemModule & OneAdapter anhängen

    Java
     OneAdapter  oneAdapter  =  new  OneAdapter 
     ()
        .attachItemModule ( neu  MessageModule  ()) .  addState ( neu  SelectionStateImpl 
     ()
        .attachItemSelectionModule ( neu  ItemSelectionModuleImpl 
     ())
         ... 
    Kotlin
     val  oneAdapter  =  OneAdapter 
     ()
        .attachItemModule ( MessageModule  ()). addState ( SelectionStateImpl 
     ())
        .attachItemSelectionModule ( ItemSelectionModuleImpl 
     ())
        ... 

    Klickereignis-Hook

    Elementmodule können einfach mit Ereignis-Hooks erweitert werden, z. B. ClickEventHook, mit denen Sie einen Klicklistener für die gesamte Ansicht binden können.

    1. Implementieren von Click-Event-Hooks

    Java
     -Klasse  MessageClickEvent  erweitert  ClickEventHook < MessageModel > 
     {
         @Override 
     public  void  onClick  ( @NonNull  MessageModel  model  @NonNull  ViewB viewBinder 
    ) {
             //  Platzieren Sie Ihre On-Click-Logik hier. 
    
    
        }
    } 
    Kotlin
     -Klasse  MessageClickEvent :  ClickEventHook  < MessageModel 
    > () {
         überschreiben  Spaß  onClick  ( Modell :  MessageModel  viewBinder :  ViewBinder 
    
             //  Platzieren Sie Ihre On-Click-Logik hier. 
    
    
        }
    } 

    2. An ItemModule anhängen

    Java
     OneAdapter  oneAdapter  =  new  OneAdapter 
     ()
        .attachItemModule ( neu  MessageModule  ()) .  addEventHook ( neu  MessageClickEvent 
     ())
         ... 
    Kotlin
     val  oneAdapter  =  OneAdapter 
     ()
        .attachItemModule ( MessageModule  ()). addEventHook ( MessageClickEvent 
     ())
        ... 

    Copyright (c) 2019 Idan Atsmon

    Hiermit wird jeder Person, die eine Kopie dieser Software und der zugehörigen Dokumentationsdateien (die "Software") erhält, kostenlos die Genehmigung zum Handel mit der Software erteilt ohne Einschränkung, einschließlich ohne Einschränkung der Rechte zur Nutzung, zum Kopieren, Ändern, Zusammenführen, Veröffentlichen, Verteilen, Unterlizenzieren und / oder Verkaufen von Kopien der Software sowie zur Erlaubnis von Personen, denen die Software zur Verfügung gestellt wird, dies zu tun, vorbehaltlich der folgenden Bestimmungen Bedingungen:

    Der obige Urheberrechtshinweis und dieser Genehmigungshinweis sind in allen Kopien oder wesentlichen Teilen der Software enthalten.

    Die Software wird "wie besehen" und ohne jegliche ausdrückliche oder stillschweigende Garantie, einschließlich solcher, zur Verfügung gestellt NICHT BESCHRÄNKT AUF DIE GARANTIEN FÜR HANDELSFÄHIGKEIT, EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND NICHTVERLETZUNG. IN KEINEM FALL HAFTEN DIE AUTOREN ODER COPYRIGHT-INHABER FÜR JEGLICHE HAFTUNGSANSPRÜCHE, SCHÄDEN ODER SONSTIGE HAFTUNGEN, DIE AUS VERTRAGSVERHÄLTNISSEN, VERTRAGSVERHÄLTNISSEN, UNTERLASSEN ODER IN VERBINDUNG MIT DER SOFTWARE ODER DER VERWENDUNG ODER ANDEREN HAND SOFTWARE.

    .

    About AndroidWeltEditor

    Check Also

    Unity-Zertifizierung für Entwickler: Lohnt es sich?

    Die Unity-Zertifizierung kann Ihnen möglicherweise dabei helfen, Ihren Traumjob als Spieleentwickler zu erlangen. Hierbei handelt …

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.