2017-02-10 5 views
3

私はKotlin合成プロパティがCustomViewsで動作しないことに気付きました。それが意図されているかどうかわかりません。生成されたJavaクラスを読むとき、私はキャッシュが存在することを確認します:Kotlin合成プロパティ

private HashMap _$_findViewCache; 

これは決して使用されません。代わりに、ビューが必要なときはいつでも、findViewByIdが呼び出されます。これはデフォルトの動作ですか?アクティビティーやフラグメントにのみ作用する合成プロパティー?

+0

'_ $ _ findViewCache'フィールドは' Activity'と 'Fr 'で自動的に生成されます「授業」クラス。カスタムビュークラスの中に '_ $ _ findViewCache'がありますか? – yanex

+0

はい。コードが生成されます(マップとキャッシュ関数がそこにあります)。しかし、synteheticを介してプロパティにアクセスすると、findViewByIdバイトコードに変換されます(私は 'Kotlin Bytecode'オプションを通して参照してください)。 –

+0

これはバグであればちょっと重大です。特に、アニメーションを実行するビューでは、findViewbyIdが何度も呼び出されます。あなたが余分な情報が必要な場合は私に教えてください –

答えて

1

This works now. Blog post on kotlin-android-extensions

カスタムクラスはキャッシュが生成されていて、それを使用しなければならない:カスタムビュークラスで

itemTitle.text = "Hello World!" 

この、次のようになります。

適切

をキャッシュを利用
((TextView)this._$_findCachedViewById(id.itemTitle)).setText((CharSequence)"Hello World!"); 

関連する問題