mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
Expose itemIdGenerator that can be used to generate unique ID for items on ListView (#4964)
* fixed the context of the getItem() call in android's ListView adapter (#4962) * added itemIdGenerator function to the list-view interface to allow delegating the creating of a unique id for an item to a consumer of the listview (#4962)
This commit is contained in:
committed by
Hristo Hristov
parent
31d10192f5
commit
4bcb9840c1
@@ -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 = {
|
||||
@@ -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() {
|
||||
//
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
5
tns-core-modules/ui/list-view/list-view.d.ts
vendored
5
tns-core-modules/ui/list-view/list-view.d.ts
vendored
@@ -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.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user