diff --git a/apps/tests/ui/list-view/list-view-tests.ts b/apps/tests/ui/list-view/list-view-tests.ts index 4ad3cfcab..cc1c113d3 100644 --- a/apps/tests/ui/list-view/list-view-tests.ts +++ b/apps/tests/ui/list-view/list-view-tests.ts @@ -459,6 +459,26 @@ export function test_loadMoreItems_not_raised_when_showing_many_items() { helper.buildUIAndRunTest(listView, testAction); } +export function test_loadMoreItems_is_raised_when_scroll_to_last_item() { + var listView = new listViewModule.ListView(); + listView.on(listViewModule.ListView.itemLoadingEvent, loadViewWithItemNumber); + + function testAction(views: Array) { + var loadMoreItemsCount = 0; + listView.items = MANY_ITEMS; + listView.on(listViewModule.ListView.loadMoreItemsEvent, function (data: observable.EventData) { + loadMoreItemsCount++; + }); + + listView.scrollToIndex(MANY_ITEMS.length - 1); + + TKUnit.wait(ASYNC); + TKUnit.assertEqual(loadMoreItemsCount, 1, "loadMoreItemsCount"); + }; + + helper.buildUIAndRunTest(listView, testAction); +} + export function test_usingAppLevelConvertersInListViewItems() { var listView = new listViewModule.ListView(); diff --git a/ui/list-view/list-view-common.ts b/ui/list-view/list-view-common.ts index 04c2c3f29..9dfa3771c 100644 --- a/ui/list-view/list-view-common.ts +++ b/ui/list-view/list-view-common.ts @@ -101,6 +101,10 @@ export class ListView extends view.View implements definition.ListView { // } + public scrollToIndex(index: number) { + // + } + public _getItemTemplateContent(index: number): view.View { var v; diff --git a/ui/list-view/list-view.android.ts b/ui/list-view/list-view.android.ts index 48b29ba84..e9cd484c2 100644 --- a/ui/list-view/list-view.android.ts +++ b/ui/list-view/list-view.android.ts @@ -102,6 +102,12 @@ export class ListView extends common.ListView { (this.android.getAdapter()).notifyDataSetChanged(); } + public scrollToIndex(index: number) { + if (this._android) { + this._android.smoothScrollToPosition(index, ); + } + } + public _onDetached(force?: boolean) { super._onDetached(force); diff --git a/ui/list-view/list-view.d.ts b/ui/list-view/list-view.d.ts index f6cd1531a..abdc5236e 100644 --- a/ui/list-view/list-view.d.ts +++ b/ui/list-view/list-view.d.ts @@ -85,6 +85,14 @@ declare module "ui/list-view" { */ refresh(); + /** + * Scrolls the specified item with index into view. + * [iOS](https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UITableView_Class/#//apple_ref/occ/instm/UITableView/scrollToRowAtIndexPath:atScrollPosition:animated:) + * [Android](http://developer.android.com/reference/android/widget/ListView.html#setSelection(int)) + * @param index - Item index. + */ + scrollToIndex(index: number); + /** * A basic method signature to hook an event listener (shortcut alias to the addEventListener method). * @param eventNames - String corresponding to events (e.g. "propertyChange"). Optionally could be used more events separated by `,` (e.g. "propertyChange", "change"). diff --git a/ui/list-view/list-view.ios.ts b/ui/list-view/list-view.ios.ts index cca812db1..77bb874dc 100644 --- a/ui/list-view/list-view.ios.ts +++ b/ui/list-view/list-view.ios.ts @@ -173,6 +173,13 @@ export class ListView extends common.ListView { return this._ios; } + public scrollToIndex(index: number) { + if (this._ios) { + this._ios.scrollToRowAtIndexPathAtScrollPositionAnimated(NSIndexPath.indexPathForItemInSection(index, 0), + UITableViewScrollPosition.UITableViewScrollPositionTop, true); + } + } + public refresh() { if (this.isLoaded) { this._ios.reloadData();