Skip to content

Commit 87b441f

Browse files
committed
implement #30 - android
1 parent 5006895 commit 87b441f

File tree

2 files changed

+46
-24
lines changed

2 files changed

+46
-24
lines changed

grid-view-common.ts

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -125,17 +125,6 @@ export abstract class GridViewBase extends View implements GridViewDefinition {
125125
return this._itemTemplatesInternal[0];
126126
}
127127

128-
// TODO: Remove this
129-
public _getItemTemplateContent(): View {
130-
let view;
131-
132-
if (this.itemTemplate) {
133-
view = parse(this.itemTemplate, this);
134-
}
135-
136-
return view;
137-
}
138-
139128
public _prepareItem(item: View, index: number) {
140129
if (item) {
141130
item.bindingContext = this._getDataItem(index);

grid-view.android.ts

Lines changed: 46 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,13 @@ See the License for the specific language governing permissions and
1414
limitations under the License.
1515
***************************************************************************** */
1616

17-
import { Length, View } from "ui/core/view";
17+
import { KeyedTemplate, Length, View } from "ui/core/view";
1818
import * as utils from "utils/utils";
1919

2020
import {
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

Comments
 (0)