2017-09-20 4 views
0

J'utilise kotlin lang pour créer mon application Android. Je voulais créer un objet (singleton) qui se spécialiserait dans la modyfying dynamique des composants de vue de ma activité principale (comme les boutons etc) et serait utilisé par mon activité principale elle-même.Kotlin/Application Android - changer les éléments de vue depuis l'extérieur Activité

Certains problèmes sont survenus. Tout d'abord, l'objet n'est (bien sûr) pas un type d'activité, donc je ne peux pas utiliser par exemple findViewById et d'autres fonctions d'Activity etc. J'ai essayé de résoudre ceci en passant le principal activité par le constructeur d'objet, mais ce n'est pas autorisé. leurs constructeurs.

En outre, je ne suis pas sûr, si cette conception de l'application est acceptable selon au moins les bonnes pratiques. Si ce n'est pas vraiment - quel schéma de conception dois-je utiliser pour séparer la logique de la façon de modifier mes mises en page à partir du code qui ne fera que modifier les éléments d'affichage?

Merci d'avance pour vos suggestions.

Répondre

0

Vous pouvez utiliser des observateurs, des observables pour le faire. RxJava/RxAndroid/RxKotlin

ou vous pouvez utiliser Otto ou Greenbus pour l'envoi d'événements/attraper à partir d'une classe singleton.

Exemple RxKotlin.

UserManager.kt

@Singleton 
    class UserManager(private val rxBus : RxBus){ 

    fun sendX(){ 
    rxBus.send(EventX()) 
    } 

sur l'activité principale

MainActivity.kt

class MainActivity : AppCompat .... 

onCreate(...){ 


rxBus.toObservable() 
            .applySchedulers() 
            .subscribe({ event -> 
                if (event is EventX) 
                { 
                 //do something here. 
                } 
               }) 
         ) 
} 

rxBus.kt

@Singleton 
class RxBus 
{ 
    private val _bus = PublishSubject.create<Any>() 

    fun send(o: Any) 
    { 
     _bus.onNext(o) 
    } 

    fun toObservable(): Observable<Any> 
    { 
     return _bus 
    } 

    fun hasObservers(): Boolean 
    { 
     return _bus.hasObservers() 
    } 
} 

Otto est une bonne bibliothèque et facile à utiliser du carré, mais ja ke warthon a dit de ne pas l'utiliser sur kotlin aller avec rxjava. je ne me souviens pas pourquoi.

+0

Merci pour les conseils. :) –