2017-02-10 6 views
3

나는 Kotlin 합성 속성이 CustomViews에서 작동하지 않는다는 것을 알아 챘다. 그것이 의도되었는지 아닌지 나는 모른다. 생성 된 자바 클래스를 읽을 때, 나는 캐시가 존재하는 것을 본다 :Kotlin 합성 속성

private HashMap _$_findViewCache; 

결코 사용되지 않는다. 대신보기가 필요할 때마다 findViewById이 호출됩니다. 이것이 기본 동작입니까? 합성 속성은 활동과 단편에서만 작동합니까?

+0

'_ $ _ findViewCache' 필드는'Activity'와'Fr agment' 수업. 사용자 정의 View 클래스 내에'_ $ _ 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!"); 

제대로

를 캐시를 사용