@@ -57,28 +57,31 @@ export class DropDown extends DropDownBase {
5757 private _androidViewId : number ;
5858
5959 public createNativeView ( ) {
60+ initializeTNSSpinner ( ) ;
6061 const spinner = new TNSSpinner ( new WeakRef ( this ) ) ;
6162
6263 if ( ! this . _androidViewId ) {
6364 this . _androidViewId = android . view . View . generateViewId ( ) ;
6465 }
6566 spinner . setId ( this . _androidViewId ) ;
6667
68+ initializeDropDownAdapter ( ) ;
6769 const adapter = new DropDownAdapter ( new WeakRef ( this ) ) ;
6870 spinner . setAdapter ( adapter ) ;
69- ( spinner as any ) . adapter = adapter ;
71+ spinner . adapter = adapter ;
7072
73+ initializeDropDownItemSelectedListener ( ) ;
7174 const itemSelectedListener = new DropDownItemSelectedListener ( new WeakRef ( this ) ) ;
7275 spinner . setOnItemSelectedListener ( itemSelectedListener ) ;
73- ( spinner as any ) . itemSelectedListener = itemSelectedListener ;
76+ spinner . itemSelectedListener = itemSelectedListener ;
7477
7578 return spinner ;
7679 }
7780
7881 public initNativeView ( ) {
7982 super . initNativeView ( ) ;
8083
81- const nativeView = this . nativeView as any ;
84+ const nativeView = this . nativeView ;
8285 nativeView . adapter . owner = new WeakRef ( this ) ;
8386 nativeView . itemSelectedListener . owner = new WeakRef ( this ) ;
8487
@@ -90,7 +93,7 @@ export class DropDown extends DropDownBase {
9093 }
9194
9295 public disposeNativeView ( ) {
93- const nativeView = this . nativeView as any ;
96+ const nativeView = this . nativeView ;
9497 nativeView . adapter . owner = null ;
9598 nativeView . itemSelectedListener . owner = null ;
9699
@@ -107,11 +110,11 @@ export class DropDown extends DropDownBase {
107110 public open ( ) {
108111 if ( this . isEnabled ) {
109112 this . nativeView . performClick ( ) ;
110- }
113+ }
111114 }
112115
113116 public close ( ) {
114- this . nativeView . onDetachedFromWindow ( ) ;
117+ this . nativeView . onDetachedFromWindowX ( ) ;
115118 }
116119
117120 public [ selectedIndexProperty . getDefault ] ( ) : number {
@@ -233,7 +236,26 @@ export class DropDown extends DropDownBase {
233236 }
234237}
235238
236- class TNSSpinner extends android . widget . Spinner {
239+ /* A snapshot-friendly, lazy-loaded class for TNSSpinner BEGIN */
240+ interface TNSSpinner extends android . widget . Spinner {
241+ adapter ;
242+ itemSelectedListener ;
243+
244+ /*tslint:disable-next-line no-misused-new*/
245+ new ( owner : WeakRef < DropDown > ) : TNSSpinner ;
246+
247+ /** onDetachedFromWindow is protected so public version renamed */
248+ onDetachedFromWindowX ( ) ;
249+ }
250+
251+ let TNSSpinner : TNSSpinner ;
252+
253+ function initializeTNSSpinner ( ) {
254+ if ( TNSSpinner ) {
255+ return ;
256+ }
257+
258+ class TNSSpinnerImpl extends android . widget . Spinner {
237259 private _isOpenedIn = false ;
238260
239261 constructor ( private owner : WeakRef < DropDown > ) {
@@ -266,12 +288,29 @@ class TNSSpinner extends android.widget.Spinner {
266288 }
267289 }
268290
269- public onDetachedFromWindow ( ) {
291+ public onDetachedFromWindowX ( ) : void {
270292 super . onDetachedFromWindow ( ) ;
271293 }
272294}
273295
274- class DropDownAdapter extends android . widget . BaseAdapter implements android . widget . ISpinnerAdapter {
296+ TNSSpinner = TNSSpinnerImpl as any ;
297+ }
298+ /* TNSSpinner END */
299+
300+ /* A snapshot-friendly, lazy-loaded class for DropDownAdpater BEGIN */
301+ interface DropDownAdapter extends android . widget . BaseAdapter , android . widget . ISpinnerAdapter {
302+ /*tslint:disable-next-line no-misused-new*/
303+ new ( owner : WeakRef < DropDown > ) : DropDownAdapter ;
304+ }
305+
306+ let DropDownAdapter : DropDownAdapter ;
307+
308+ function initializeDropDownAdapter ( ) {
309+ if ( DropDownAdapter ) {
310+ return ;
311+ }
312+
313+ class DropDownAdapterImpl extends android . widget . BaseAdapter implements android . widget . ISpinnerAdapter {
275314 constructor ( private owner : WeakRef < DropDown > ) {
276315 super ( ) ;
277316
@@ -372,8 +411,25 @@ class DropDownAdapter extends android.widget.BaseAdapter implements android.widg
372411 }
373412}
374413
414+ DropDownAdapter = DropDownAdapterImpl as any ;
415+ }
416+ /* DropDownAdpater END */
417+
418+ /* A snapshot-friendly, lazy-loaded class for DropDownItemSelectedListener BEGIN */
419+ interface DropDownItemSelectedListener extends java . lang . Object , android . widget . AdapterView . OnItemSelectedListener {
420+ /*tslint:disable-next-line no-misused-new*/
421+ new ( owner : WeakRef < DropDown > ) : DropDownItemSelectedListener ;
422+ }
423+
424+ let DropDownItemSelectedListener : DropDownItemSelectedListener ;
425+
426+ function initializeDropDownItemSelectedListener ( ) {
427+ if ( DropDownItemSelectedListener ) {
428+ return ;
429+ }
430+
375431@Interfaces ( [ android . widget . AdapterView . OnItemSelectedListener ] )
376- class DropDownItemSelectedListener extends java . lang . Object implements android . widget . AdapterView . OnItemSelectedListener {
432+ class DropDownItemSelectedListenerImpl extends java . lang . Object implements android . widget . AdapterView . OnItemSelectedListener {
377433 constructor ( private owner : WeakRef < DropDown > ) {
378434 super ( ) ;
379435
@@ -400,4 +456,8 @@ class DropDownItemSelectedListener extends java.lang.Object implements android.w
400456 public onNothingSelected ( ) {
401457 /* Currently Not Needed */
402458 }
403- }
459+ }
460+
461+ DropDownItemSelectedListener = DropDownItemSelectedListenerImpl as any ;
462+ }
463+ /* DropDownItemSelectedListener END */
0 commit comments