私は自分のコードで合成プロパティを使用しました。しかし、どのようにいつ実際にアンドロイドの各ビューを初期化するのかと思っています。kotlin - 合成プロパティを初期化する方法は?
各ビューをインポートし、そのIDでアクセスするだけです。ビューオブジェクトにメモリを割り当てるとき?
私は自分のコードで合成プロパティを使用しました。しかし、どのようにいつ実際にアンドロイドの各ビューを初期化するのかと思っています。kotlin - 合成プロパティを初期化する方法は?
各ビューをインポートし、そのIDでアクセスするだけです。ビューオブジェクトにメモリを割り当てるとき?
これは、Kotlin Android拡張機能を使用する場所でKotlinファイルを逆コンパイルすることで調査するのは簡単です。 (Tools -> Kotlin -> Show Kotlin Bytecode
に行ってから、表示されている枠でDecompile
を選択してください)。つまり、それは魔法ではなく、findViewById
を使用して、View
を具体的なタイプにキャストします。
Activity
またはFragment
の内部で使用する場合は、参照は1回だけ発生するようにMap
にキャッシュされます。その後、キーとしてIDを使ってマップエントリを取得するだけのコストを支払うだけです。
ViewGroup
にそれを使用することができ
は、これらの呼び出しは、その行があるたびに起こるのだろう簡単なfindViewById
の呼び出しに置き換えられます到達した。
val view = inflater.inflate(...)
view.btnLogin.text = "Login"
そして、それはバイトコードでこれに似たものに変換されます:あなたのレイアウトの実際のView
インスタンスがまだ作成されていることを
View view = inflater.inflate(...);
Button btnLogin = (Button) view.findViewById(R.id.btnLogin);
btnLogin.setText("Login");
メモこの2番目の構文は次のようになります膨張される。 Kotlin Android拡張機能は、findViewById
コール以上の構文砂糖のみです。
XMLから膨らませている場合は、実行中にメモリが割り当てられます。 – Sufian