2017-09-20 20 views
0

私はAndroidアプリを作成するためにkotlin langを使用しています。Kotlin/Androidアプリ - 外部からのビュー要素の変更

主なアクティビティのビューコンポーネントを動的に変更する(ボタンなど)ために特化し、主なアクティビティ自体で使用されるオブジェクト(シングルトン)を作成したかったのです。

問題が発生しました。まず第一に、オブジェクトは(もちろん)Activity型ではないので、findViewByIdや他のActivityの関数などを使うことはできません。オブジェクトのコンストラクタでmainアクティビティを渡すことでこれを解決しようとしましたが、オブジェクトはできませんそれらのコンストラクタ。

さらに、このアプリの設計が少なくとも優れた方法で受け入れられるかどうかはわかりません。本当にそうでない場合 - ビュー要素を変更するだけのコードからレイアウトを変更する方法のロジックを分離するために、どのデザインパターンを使用する必要がありますか?

ご協力いただきありがとうございます。

答えて

0

Observers observablesを使用すると、それを行うことができます。 RxJava/RxAndroid/RxKotlin

または、シングルトンクラスからのイベント送信/キャッチには、Ottoまたはgreenbusを使用できます。

RxKotlinの例。

主な活動

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

オットー上UserManager.kt

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

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

は良い、使いやすいライブラリです正方形から、しかしジャケートンはrxjavaでkotlin goに使ってはいけないと言った。なぜ私は覚えていない。

+0

ヒントありがとうございます。 :) –

関連する問題