Kotlin forAndroidでインターフェースをトリガーする

ジョシュ・リベイロ

Kotlin for Androidの使用に関しては、インターフェースの特定の実装があります。フラグメントからインターフェースをトリガーします。フラグメントがUIアクションを親アクティビティに伝達する必要がある一般的なシナリオを考えてみます。Javaでは、インターフェースを定義し、その「リスナー」インスタンスを作成し、インターフェースの親でアクションを実装/オーバーライドします。私にとってそれほど単純ではないのは、リスナーインスタンスの作成です。少しグーグルした後、実装例を見つけましたが、なぜそれが機能するのかわかりません。これを行うためのより良い方法はありますか?なぜ以下のように実装する必要があるのですか?

    class ImplementingFragment : Fragment(){

  private lateinit var listener: FragmentEvent
  private lateinit var vFab: FloatingActionButton

  //Here is the key piece of code which triggers the interface which is befuddling to me
  override fun onAttach(context: Context?) {
          super.onAttach(context)
          if(context is FragmentEvent) {
              listener = context
          }
      }

    //Notice the onClickListener using our interface listener member variable
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                              savedInstanceState: Bundle?): View? {
        val v: View? = inflater.inflate(R.layout.fragment_layout, container, false)
            vFab = v?.findViewById(R.id.fh_fab)
            vFab.setOnClickListener{listener.SomethingHappened()}
        return v
    }  


}



interface FragmentEvent{
    fun SomethingHappened()
}
スタニスラフボンダー

このコードでlateinit var listener: FragmentEventは初期化する必要があり、することはできませんnullだからのonAttachように見えるはずです

override fun onAttach(context: Context?) {
    super.onAttach(context)
    if (context is FragmentEvent) {
        listener = context
    } else {
        throw RuntimeException(context!!.toString() + " must implement FragmentEvent")
    }
}

この場合、あなたは、実装するのを忘れた場合FragmentEventにはActivityそうでない場合は、コールバックを使用する準備ができて、例外が発生しましたよ、あなた。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Kotlinで匿名インターフェースを設定する

分類Dev

Kotlinで静的インターフェイスフィールドを宣言する

分類Dev

InvalidDefinitionExceptionインターフェースでKotlinクラスをデシリアライズするとき

分類Dev

KotlinでOnClickListenerインターフェースを実装する方法は?

分類Dev

Kotlinで、インターフェイスに委任し、引数のないパブリックコンストラクターのみを提供する方法は?

分類Dev

kotlinのジェネリックス-インターフェース制限を実装するタイプ

分類Dev

Kotlinを使用してインプレースでリストをフィルター処理する方法

分類Dev

Kotlinを使用してインプレースでリストをフィルター処理する方法

分類Dev

Kotlinのインターフェースデリゲートに依存関係を注入するにはどうすればよいですか?

分類Dev

内部でインターフェースを実装するKotlinインラインクラス

分類Dev

インターフェースをフラグメント、Kotlin、Androidにアタッチする方法

分類Dev

Kotlin:汎用インターフェースを返す

分類Dev

kotlinは、定義ファイルの外部でインターフェースを実装するクラスの作成をサポートしていますか?

分類Dev

Kotlinのコレクションフィルタリングで関数型インターフェースを使用することは可能ですか?

分類Dev

このKotlinコルーチンがインターフェイスをフリーズしているのはなぜですか?

分類Dev

Kotlin:インターフェースで入力制約を指定します

分類Dev

Kotlinに、このJavaインターフェースを実装する方法?

分類Dev

Kotlinの既存のクラスにインターフェースを追加することは可能ですか?

分類Dev

Kotlinシンタックスシュガー:コンストラクターでvarをすべてプライベートにする

分類Dev

Kotlinに匿名のインターフェースのインスタンスを作成する方法?

分類Dev

クラスはKotlinまたはJavaでリフレクションを使用して、インターフェイスからデフォルトのメソッドをオーバーライドしているかどうかを確認する方法?

分類Dev

Kotlinのインターフェースでプロパティを使用する必要がありますか?

分類Dev

Kotlinでインターフェイスを使用するとプラットフォーム宣言の衝突が発生する

分類Dev

kotlinでインターフェイスのみを委任できるのはなぜですか?

分類Dev

Kotlinでジェネリックスとの関数型インターフェースを定義する方法は?

分類Dev

Kotlinでラムダとして関数型インターフェースを実装する方法は?

分類Dev

Javaインターフェースを実装するKotlinデータクラス

分類Dev

Kotlinでのインターフェイスリスナーのインスタンス化

分類Dev

Kotlinでインターフェイス委任を使用するときに、スーパークラスを明示的に呼び出すことはできますか?

Related 関連記事

  1. 1

    Kotlinで匿名インターフェースを設定する

  2. 2

    Kotlinで静的インターフェイスフィールドを宣言する

  3. 3

    InvalidDefinitionExceptionインターフェースでKotlinクラスをデシリアライズするとき

  4. 4

    KotlinでOnClickListenerインターフェースを実装する方法は?

  5. 5

    Kotlinで、インターフェイスに委任し、引数のないパブリックコンストラクターのみを提供する方法は?

  6. 6

    kotlinのジェネリックス-インターフェース制限を実装するタイプ

  7. 7

    Kotlinを使用してインプレースでリストをフィルター処理する方法

  8. 8

    Kotlinを使用してインプレースでリストをフィルター処理する方法

  9. 9

    Kotlinのインターフェースデリゲートに依存関係を注入するにはどうすればよいですか?

  10. 10

    内部でインターフェースを実装するKotlinインラインクラス

  11. 11

    インターフェースをフラグメント、Kotlin、Androidにアタッチする方法

  12. 12

    Kotlin:汎用インターフェースを返す

  13. 13

    kotlinは、定義ファイルの外部でインターフェースを実装するクラスの作成をサポートしていますか?

  14. 14

    Kotlinのコレクションフィルタリングで関数型インターフェースを使用することは可能ですか?

  15. 15

    このKotlinコルーチンがインターフェイスをフリーズしているのはなぜですか?

  16. 16

    Kotlin:インターフェースで入力制約を指定します

  17. 17

    Kotlinに、このJavaインターフェースを実装する方法?

  18. 18

    Kotlinの既存のクラスにインターフェースを追加することは可能ですか?

  19. 19

    Kotlinシンタックスシュガー:コンストラクターでvarをすべてプライベートにする

  20. 20

    Kotlinに匿名のインターフェースのインスタンスを作成する方法?

  21. 21

    クラスはKotlinまたはJavaでリフレクションを使用して、インターフェイスからデフォルトのメソッドをオーバーライドしているかどうかを確認する方法?

  22. 22

    Kotlinのインターフェースでプロパティを使用する必要がありますか?

  23. 23

    Kotlinでインターフェイスを使用するとプラットフォーム宣言の衝突が発生する

  24. 24

    kotlinでインターフェイスのみを委任できるのはなぜですか?

  25. 25

    Kotlinでジェネリックスとの関数型インターフェースを定義する方法は?

  26. 26

    Kotlinでラムダとして関数型インターフェースを実装する方法は?

  27. 27

    Javaインターフェースを実装するKotlinデータクラス

  28. 28

    Kotlinでのインターフェイスリスナーのインスタンス化

  29. 29

    Kotlinでインターフェイス委任を使用するときに、スーパークラスを明示的に呼び出すことはできますか?

ホットタグ

アーカイブ