RadListView Pull to Refresh
Pull-to-refresh allows you to implement a mechanism for refreshing ListView's content upon user's request. The request is done by swiping (pulling) down the list and releasing it. This experience is common in many mobile apps and is used in scenarios where a list needs to be updated with the most recent changes.
Using Pull-to-Refresh with RadListView for Angular
To enable the pull-to-refresh feature you need to follow the steps outlined below:
- Set the
pullToRefresh
property onRadListView
to true. - Provide a handler for the
pullToRefreshInitiated
which is fired when the end user requests a data refresh. - Call the
notifyPullToRefreshFinished()
method onRadListView
when the data request has been finished and the list has been updated.
The following template demonstrates a simple scenario in which the pull-to-refresh feature is used:
<RadListView #listView [items]="dataItems" pullToRefresh="true" (pullToRefreshInitiated)="onPullToRefreshInitiated($event)">
export class ListViewPullToRefreshComponent implements OnInit {
private _dataItems: ObservableArray<DataItem>;
private _numberOfAddedItems;
constructor(private _changeDetectionRef: ChangeDetectorRef) {
}
ngOnInit() {
this.initDataItems();
this._changeDetectionRef.detectChanges();
}
public get dataItems(): ObservableArray<DataItem> {
return this._dataItems;
}
public onPullToRefreshInitiated(args: ListViewEventData) {
const that = new WeakRef(this);
setTimeout(function () {
const initialNumberOfItems = that.get()._numberOfAddedItems;
for (let i = that.get()._numberOfAddedItems; i < initialNumberOfItems + 2; i++) {
if (i > posts.names.length - 1) {
break;
}
const imageUri = androidApplication ? posts.images[i].toLowerCase() : posts.images[i];
that.get()._dataItems.splice(0, 0, new DataItem(i, posts.names[i], "This is item description", posts.titles[i], posts.text[i], "res://" + imageUri));
that.get()._numberOfAddedItems++;
}
const listView = args.object;
listView.notifyPullToRefreshFinished();
}, 1000);
}
private initDataItems() {
this._dataItems = new ObservableArray<DataItem>();
this._numberOfAddedItems = 0;
for (let i = 0; i < posts.names.length - 15; i++) {
this._numberOfAddedItems++;
if (androidApplication) {
this._dataItems.push(new DataItem(i, posts.names[i], "This is item description", posts.titles[i], posts.text[i], "res://" + posts.images[i].toLowerCase()));
}
else {
this._dataItems.push(new DataItem(i, posts.names[i], "This is item description", posts.titles[i], posts.text[i], "res://" + posts.images[i]));
}
}
}
}