Nativescript 无法让 ListView 滚动到底部
Nativescript can't get ListView to scroll to bottom
加载时,我试图让 ListView 滚动到底部。但是,没有任何反应。这是我的,运行 在 Android:
<ListView #lv row="0" [items]="myItems" class="list-group" separatorColor="transparent" [itemTemplateSelector]="templateSelector">
然后在 Typescript 中我有:
@ViewChild('lv') listViewElem: ElementRef;
private scrollToBottom(lv: ListView) {
if (lv && lv.items.length > 0) {
lv.scrollToIndex(lv.items.length - 1);
lv.refresh();
}
}
ngAfterViewInit() {
setTimeout(() => {
this.scrollToBottom(this.listViewElem.nativeElement);
}, 500);
}
在我调试时,一切似乎都很好。在 ngAfterViewInit 中,定义了 listViewElem,在 scrollToBottomView 中,项目被设置为一个包含 6 个元素的数组。但是当它被调用时什么也没有发生。
我也试过只在视图中添加一个按钮,当您单击时,我会调用相同的逻辑来查看它是否只是加载时初始化顺序的事情,但这也不起作用:
<Label row="0" text="Click Me" filter(tap)="scrollNow()"></Label>
并且:
public scrollNow(): void {
this.scrollToBottom(this.listViewElem.nativeElement);
}
有什么想法吗?
请问您为什么要在 scrollToIndex
之后立即尝试 lv.refresh();
,因为刷新会重新加载 ListView,它只会返回开始。
function sendComment(arg) {
var message = Frame.topmost().currentPage.getViewById('message').text;
var listView = Frame.topmost().currentPage.getViewById('listview');
chatMessages.push({
sender_id: '828838383333',
receiver_id: '939939494949',
body: message,
from: {},
to: {},
createdAt: ''
});
listView.refresh();
listView.scrollToIndex(chatMessages.length - 1, false);
}
chatMessages 是您的可观察数组。
加载时,我试图让 ListView 滚动到底部。但是,没有任何反应。这是我的,运行 在 Android:
<ListView #lv row="0" [items]="myItems" class="list-group" separatorColor="transparent" [itemTemplateSelector]="templateSelector">
然后在 Typescript 中我有:
@ViewChild('lv') listViewElem: ElementRef;
private scrollToBottom(lv: ListView) {
if (lv && lv.items.length > 0) {
lv.scrollToIndex(lv.items.length - 1);
lv.refresh();
}
}
ngAfterViewInit() {
setTimeout(() => {
this.scrollToBottom(this.listViewElem.nativeElement);
}, 500);
}
在我调试时,一切似乎都很好。在 ngAfterViewInit 中,定义了 listViewElem,在 scrollToBottomView 中,项目被设置为一个包含 6 个元素的数组。但是当它被调用时什么也没有发生。
我也试过只在视图中添加一个按钮,当您单击时,我会调用相同的逻辑来查看它是否只是加载时初始化顺序的事情,但这也不起作用:
<Label row="0" text="Click Me" filter(tap)="scrollNow()"></Label>
并且:
public scrollNow(): void {
this.scrollToBottom(this.listViewElem.nativeElement);
}
有什么想法吗?
请问您为什么要在 scrollToIndex
之后立即尝试 lv.refresh();
,因为刷新会重新加载 ListView,它只会返回开始。
function sendComment(arg) {
var message = Frame.topmost().currentPage.getViewById('message').text;
var listView = Frame.topmost().currentPage.getViewById('listview');
chatMessages.push({
sender_id: '828838383333',
receiver_id: '939939494949',
body: message,
from: {},
to: {},
createdAt: ''
});
listView.refresh();
listView.scrollToIndex(chatMessages.length - 1, false);
}
chatMessages 是您的可观察数组。