Home / Android-Entwicklung / Das Android Arsenal – Eventbusse

Das Android Arsenal – Eventbusse

Eventex, Android Express Events

Android-Bibliothek zum Austausch von Nachrichten zwischen Fragmenten, ViewGroups, Aktivitäten. Es müssen keine Schnittstellen erstellt und keine Listener an mehrere Klassen übergeben werden. Es ist auch nicht erforderlich, Ereignisse zu abonnieren / abzubestellen!

Einfach

Zum Posten einer Nachricht

 Neu  UIEvent  ( " button.ok.click " )  Posten (Aussicht);  //  Ja, das ist es 

eine Nachricht zu empfangen. In jeder Klasse, die Fragment, ViewGroup oder Activity erweitert

 public  class  CustomFragment  extend  Fragment  implementiert  UIEventListener 
 {
 //  ..... 
 @Override 
 public  boolean  onMessage  ( @NonNull  UIEvent 
 uiEvent [19459021 ) {
         switch  (uiEvent . 
 what) {
             case  " button.ok.click " : 
 Log .  d (uiEvent . 
 ] toString ());
                 return  true ;  //  Nachrichtenverbreitung stoppen 


        }
         return  false ;  //  andere Objekte die Nachricht verarbeiten lassen 


    }
} 

Deutlich weniger Code für das Boilerplate im Vergleich zur klassischen Lösung Kommunizieren Sie mit anderen Fragmenten! Die Klasse CustomFragment erweitert die Android-Klasse Fragment. Es funktioniert auch gut, wenn die Klasse Activity, ViewGroup oder ein von ViewGroup abgeleitetes Layout (LinearLayout, FrameLayout usw.) erweitert.

Features

  • Übermitteln von Nachrichten zwischen Komponenten einer Activity asynchron.
  • Keine Notwendigkeit Abonnieren / Abbestellen zum Empfangen von Nachrichten.
  • Entkoppelt Komponenten vollständig.
  • Keine Reflektion und keine ProGuard-Regeln.
  • Kleine Codegröße.

Anforderungen

  • Android 4.1.0 (API 16) oder höher. [19659036] Java 8

Voraussetzungen

Stellen Sie sicher, dass die Java 8 (1.8) -Unterstützung in der Gradle-Datei aktiviert ist





     compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

EventEx zur Projekt-Gradle-Datei hinzufügen (Android x -basierte Projekte)


 Implementierung 'dev.uchitel: eventex: 0.2.0'

Oder für Projekte der Android Support Library


 Implementierung 'dev.uchitel: eventex-support: 0.2.0'

Weitere Details

Nachricht kann zusätzliche Ganzzahlen und Zeichenfolgen enthalten:

 Neu  UIEvent  ( 12345 
)
    .setText ( " Text, der mit der Nachricht übergeben werden soll " 
)
    .setNumber ( 9876 )  //  Eine ganze Zahl, die mit der Nachricht übergeben werden soll 

    .post (viewGroup); 

Der nächste Code erhält diese Nachricht ordnungsgemäß:

 public  class  FragmentReceiver  extend  Fragment  implements  UIEventListener 
 {
 //  ..... 
 @Override 
 public  boolean  onMessage  ( @NonNull  UIEvent 
 uiEvent [19459021 ) {
         if  (!  uiEvent .  isAppNamespace ())  return  false 

;

         switch  (uiEvent . 
 code) {
             Fall  12345 : 
 Protokoll .  d ( FragmentReceiver  text =  +  uiEvent . 
 getText ());
                 Log .  d ( " FragmentReceiver "  " number = "  +  uiEvent . 
 getNumber ());
                 return  true ;  //  Nachrichtenverbreitung stoppen 


        }
         return  false ;  //  andere Komponenten die Nachricht verarbeiten lassen 


    }
} 

Die Nachricht kann eine Ganzzahl-ID, eine Zeichenfolgen-ID oder beides für komplexere Steuerungsszenarien verwenden:

 new  UIEvent  ( 12345  ". ok.click  "
))
    .post (view); 

Die 'onMessage' für den obigen Code:

 public  class  FragmentReceiver  extend  Fragment  implements  UIEventListener 
 {
 //  ..... 
 @Override 
 public  boolean  onMessage  ( @NonNull  UIEvent 
 uiEvent [19459021 ) {
         if  (!  uiEvent .  isAppNamespace ())  return  false 

;

         switch  (uiEvent . 
 code) {
             case  12345 : 
 if  (uiEvent .  what .  equal ( " button.ok.click 
) {
                     //  ... 
 return  true ;  //  Nachrichtenverbreitung stoppen 



                }
        }
         return  false ;  //  andere Komponenten die Nachricht verarbeiten lassen 


    }
} 

Verwenden Sie beim Schreiben von Android-Bibliotheken unbedingt den Namespace, um Kollisionen zu vermeiden. Das Senden einer Nachricht in der Bibliothek kann folgendermaßen aussehen:

 neu  UIEvent  ( " button.ok.click " 
)
    .setNamespace ( " lib_name.company_name.com " 
)
    .post (view); 

Der Namespace "lib_name.company_name.com" verhindert ID-Kollisionen, wenn die Bibliothek an Entwickler von Drittanbietern verteilt wird.

Diese Nachricht wird im Bibliotheksmodul

 public  empfangen ] Klasse  FragmentReceiver  erweitert  Fragment  implementiert  UIEventListener 
 {
 //  ..... 
 @Override 
 public  boolean  onMessage  ( @NonNull  UIEvent 
 uiEvent [19459021 ) {
         //  zurückgeben, wenn dies keine Bibliotheksnachricht ist 
 if  (!  uiEvent .  getNamespace () .  equals (  " libname.company.com " )  return  false 

;

         switch  (uiEvent . 
 what) {
             case  " button.ok.click " : 
 Log .  d (uiEvent . 
 ] getText ());
                 return  true ;  //  Nachrichtenverbreitung stoppen 


        }
         return  false ;  //  andere Objekte die Nachricht verarbeiten lassen 


    }
} 

R8 / ProGuard

Keine besonderen Anforderungen für R8 oder ProGuard

Denken Sie, dass dies nützlich sein könnte? Hilf Entwicklern, es zu finden.

Alternative Bibliotheken

Lizenz














 Copyright 2019 Alexander Uchitel

Lizenziert unter der Apache-Lizenz, Version 2.0 (die "Lizenz");
Sie dürfen diese Datei nur in Übereinstimmung mit der Lizenz verwenden.
Eine Kopie der Lizenz erhalten Sie unter

   http://www.apache.org/licenses/LICENSE-2.0

Sofern nicht gesetzlich vorgeschrieben oder schriftlich vereinbart, Software
unter der Lizenz vertrieben wird auf einer "AS IS" -Basis verteilt,
OHNE GARANTIEN ODER BEDINGUNGEN JEGLICHER Art, entweder ausdrücklich oder stillschweigend.
In der Lizenz finden Sie die spezifische Sprache für die Berechtigungen und
Einschränkungen unter der Lizenz.

.

About AndroidWeltEditor

Check Also

New Android App Bundle and target API level requirements in 2021

Posted by Hoi Lam, Developer Relations Engineer, Android Platform In 2021, we are continuing with …

Leave a Reply

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