Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion tns-core-modules/ui/list-view/list-view-common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,9 @@ export abstract class ListViewBase extends View implements ListViewDefinition {
public static itemTapEvent = "itemTap";
public static loadMoreItemsEvent = "loadMoreItems";
// TODO: get rid of such hacks.
public static knownFunctions = ["itemTemplateSelector"]; //See component-builder.ts isKnownFunction
public static knownFunctions = ["itemTemplateSelector", "itemIdGenerator"]; //See component-builder.ts isKnownFunction

private _itemIdGenerator: (item: any, index: number, items: any) => number = (_item: any, index: number) => index;
private _itemTemplateSelector: (item: any, index: number, items: any) => string;
private _itemTemplateSelectorBindable = new Label();
public _defaultTemplate: KeyedTemplate = {
Expand Down Expand Up @@ -72,6 +73,14 @@ export abstract class ListViewBase extends View implements ListViewDefinition {
}
}

get itemIdGenerator(): (item: any, index: number, items: any) => number {
return this._itemIdGenerator;
}

set itemIdGenerator(generatorFn: (item: any, index: number, items: any) => number) {
this._itemIdGenerator = generatorFn;
}

public refresh() {
//
}
Expand Down
9 changes: 7 additions & 2 deletions tns-core-modules/ui/list-view/list-view.android.ts
Original file line number Diff line number Diff line change
Expand Up @@ -216,14 +216,19 @@ function ensureListViewAdapterClass() {
public getItem(i: number) {
if (this.owner && this.owner.items && i < this.owner.items.length) {
let getItem = (<ItemsSource>this.owner.items).getItem;
return getItem ? getItem(i) : this.owner.items[i];
return getItem ? getItem.call(this.owner.items, i) : this.owner.items[i];
}

return null;
}

public getItemId(i: number) {
return long(i);
let item = this.getItem(i);
let id = i;
if (this.owner && item && this.owner.items) {
id = this.owner.itemIdGenerator(item, i, this.owner.items);
}
return long(id);
}

public hasStableIds(): boolean {
Expand Down
5 changes: 5 additions & 0 deletions tns-core-modules/ui/list-view/list-view.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,11 @@ export class ListView extends View {
*/
itemTemplateSelector: string | ((item: any, index: number, items: any) => string);

/**
* Item id generator
*/
itemIdGenerator: (item: any, index: number, items: any) => number;

/**
* Gets or set the items separator line color of the ListView.
*/
Expand Down