@@ -14,12 +14,13 @@ See the License for the specific language governing permissions and
1414limitations under the License.
1515***************************************************************************** */
1616
17- import { Length , View } from "ui/core/view" ;
17+ import { KeyedTemplate , Length , View } from "ui/core/view" ;
1818import * as utils from "utils/utils" ;
1919
2020import {
2121 GridViewBase ,
2222 colWidthProperty ,
23+ itemTemplatesProperty ,
2324 orientationProperty ,
2425 paddingBottomProperty ,
2526 paddingLeftProperty ,
@@ -139,11 +140,25 @@ export class GridView extends GridViewBase {
139140 const layoutManager = this . nativeView . getLayoutManager ( ) as android . support . v7 . widget . GridLayoutManager ;
140141 if ( value === "horizontal" ) {
141142 layoutManager . setOrientation ( android . support . v7 . widget . LinearLayoutManager . HORIZONTAL ) ;
142- } else {
143+ }
144+ else {
143145 layoutManager . setOrientation ( android . support . v7 . widget . LinearLayoutManager . VERTICAL ) ;
144146 }
145147 }
146148
149+ public [ itemTemplatesProperty . getDefault ] ( ) : KeyedTemplate [ ] {
150+ return null ;
151+ }
152+ public [ itemTemplatesProperty . setNative ] ( value : KeyedTemplate [ ] ) {
153+ this . _itemTemplatesInternal = new Array < KeyedTemplate > ( this . _defaultTemplate ) ;
154+ if ( value ) {
155+ this . _itemTemplatesInternal = this . _itemTemplatesInternal . concat ( value ) ;
156+ }
157+
158+ this . nativeViewProtected . setAdapter ( new GridViewAdapter ( new WeakRef ( this ) ) ) ;
159+ this . refresh ( ) ;
160+ }
161+
147162 public eachChildView ( callback : ( child : View ) => boolean ) : void {
148163 this . _realizedItems . forEach ( ( view , key ) => {
149164 callback ( view ) ;
@@ -183,14 +198,6 @@ export class GridView extends GridViewBase {
183198 this . nativeView . scrollToPosition ( index ) ;
184199 }
185200 }
186-
187- public _getRealizedView ( convertView : android . view . View ) {
188- if ( ! convertView ) {
189- return this . _getItemTemplateContent ( ) ;
190- }
191-
192- return this . _realizedItems . get ( convertView ) ;
193- }
194201
195202 private _setPadding ( newPadding : { top ?: number , right ?: number , bottom ?: number , left ?: number } ) {
196203 const nativeView : android . view . View = this . nativeView as any ;
@@ -317,13 +324,38 @@ function initGridViewAdapter() {
317324 return owner . items ? owner . items . length : 0 ;
318325 }
319326
327+ public getItem ( i : number ) {
328+ const owner = this . owner . get ( ) ;
329+ if ( owner && owner . items && i < owner . items . length ) {
330+ return owner . _getDataItem ( i ) ;
331+ }
332+
333+ return null ;
334+ }
335+
320336 public getItemId ( i : number ) {
321- return long ( i ) ;
337+ const owner = this . owner . get ( ) ;
338+ const item = this . getItem ( i ) ;
339+ let id = i ;
340+ if ( this . owner && item && owner . items ) {
341+ id = owner . itemIdGenerator ( item , i , owner . items ) ;
342+ }
343+ return long ( id ) ;
344+ }
345+
346+ public getItemViewType ( index : number ) {
347+ const owner = this . owner . get ( ) ;
348+ const template = owner . _getItemTemplate ( index ) ;
349+ const itemViewType = owner . _itemTemplatesInternal . indexOf ( template ) ;
350+
351+ return itemViewType ;
322352 }
323353
324354 public onCreateViewHolder ( parent : android . view . ViewGroup , viewType : number ) : android . support . v7 . widget . RecyclerView . ViewHolder {
325355 const owner = this . owner . get ( ) ;
326- const view = owner . _getItemTemplateContent ( ) ;
356+ const template = owner . _itemTemplatesInternal [ viewType ] ;
357+ const view = template . createView ( ) ;
358+ console . log ( "CreateViewHolder" , viewType , owner . _realizedItems . size ) ;
327359
328360 owner . _addView ( view ) ;
329361
@@ -344,7 +376,8 @@ function initGridViewAdapter() {
344376
345377 if ( owner . orientation === "horizontal" ) {
346378 vh . view . width = utils . layout . toDeviceIndependentPixels ( owner . _effectiveColWidth ) ;
347- } else {
379+ }
380+ else {
348381 vh . view . height = utils . layout . toDeviceIndependentPixels ( owner . _effectiveRowHeight ) ;
349382 }
350383
0 commit comments