Nativescript radlistview дает сбой при переходе назад со страницы сведений - PullRequest
0 голосов
/ 19 ноября 2018

При медленной загрузке большого списка элементов в Компоненте с в его шаблоне пользователь может перейти к странице «Сведения» об элементе, нажав, а после перехода назад получить такую ​​ошибку:

JS: ERROR Error: java.lang.IndexOutOfBoundsException: Invalid index 5, size is 2
JS:     java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
JS:     java.util.ArrayList.add(ArrayList.java:147)
JS:     com.telerik.widget.list.ListViewAdapter.add(ListViewAdapter.java:65)

Я думаю, это означает, что Компонент «заморожен» в кеше, но данные все еще поступают из объекта Observable из сервиса.И после того, как Компонент начал создавать новые элементы в списке, он падает, потому что уже пропустил несколько.

Как правильно связать поток данных с компонентом RadListView с возможностью его загрузки, когда компонент не активен?Я хотел бы, чтобы пользователь мог перейти на страницу сведений и обратно во время процесса загрузки данных ...

Это часть шаблона:

<RadListView id="listView" [items]="listings" height="100%" class="page page-content">
    <ListViewGridLayout tkListViewLayout spanCount="{{ spanCount }}">
        <ng-template let-item="item" let-i="index">
            <StackLayout class="card-view" id="{{ i }}" listing_id="{{ item.listing_id }}" orientation="vertical" (tap)="onTap($event)">
                <Image class="card-image" src="{{ item.url_170x135 }}" height="135" width="170" stretch="aspectFill"></Image>
                <StackLayout orientation="vertical" horizontalAlignment="center">
                    <Label className="nameLabel" [text]="getTitle(item.title)"></Label>
                </StackLayout>
            </StackLayout>
        </ng-template>
    </ListViewGridLayout>
</RadListView>

Это код компонента:

listings = new ObservableArray<any>();

constructor(private productService: ProductService, private page: Page, private routerExtensions: RouterExtensions) {}

ngOnInit(): void {
    this.productService.getListingsAdopted().subscribe((item) => this.listings.push(item));

1 Ответ

0 голосов
/ 24 ноября 2018

Только что добавили listView.refresh () при возврате на страницу со списком элементов:

    ngOnInit(): void {
        this.page.on("navigatedTo", (data: NavigatedData) => {
            if (data.isBackNavigation) {
                this.listView = <RadListView>(this.page.getViewById("listView"));
                this.listView.resumeUpdates(true); // works too
                // this.listView.refresh();

                return;
                ...
...