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.
.