Индикатор прогресса не останавливается внутри TabView в платформе Android - PullRequest
0 голосов
/ 18 декабря 2018

Я работаю с приложением nativescript. У меня есть TabView с тремя вкладками, на каждой вкладке у меня есть индикатор прогресса, показывающий загрузку api, а также скрываю индикатор после получения ответа от api. На платформе ios индикатор скрывается отлично, а на платформе android -Индикатор не скрывался. Как решить проблему?

Мой HTML-код TabView:

<TabView [(ngModel)]="tabSelectedIndex" (selectedIndexChange)="onIndexChanged($event)" selectedTabTextColor="#40053e" androidTabsPosition="bottom" androidOffscreenTabLimit="0" iosIconRenderingMode="alwaysOriginal">
    <StackLayout *tabItem="{title: 'Security', iconSource: 'res://lock'}">
        <StackLayout>
           <security></security>
        </StackLayout>
    </StackLayout>
    <StackLayout *tabItem="{title: 'Personal', iconSource: 'res://boy'}">
        <StackLayout>
           <personal></personal>
        </StackLayout>
    </StackLayout>
    <StackLayout *tabItem="{title: 'Payment', iconSource: 'res://card'}">
        <StackLayout>
            <payment></payment>
        </StackLayout>
    </StackLayout>
</TabView>

Мой код TabViw:

import { OnInit, Component } from "@angular/core";
import { TabView } from "tns-core-modules/ui/tab-view";
import { Page } from "ui/page";




@Component({
    moduleId: module.id,
    selector: "profiletab",
    templateUrl: 'profiletab.component.html',
    styleUrls: ['profiletab.component.css']
})

export class  ProfileTabComponent implements OnInit {
    private tabSelectedIndex:number;
    private selectedTabName;


    tabview:TabView;

    constructor(private page:Page) {
        this.tabSelectedIndex = 0;
        this.selectedTabName = "Security Info";
    }

    ngOnInit(){
        // this.tabview=<TabView>this.page.getViewById("tabcontrol");
        // this.tabview.androidOffscreenTabLimit=1;
    }

    onIndexChanged(args){
        let tabView = <TabView>args.object;
        switch (tabView.selectedIndex) {
            case 0:
                this.selectedTabName = "Security Info";
                break;
            case 1:
                this.selectedTabName = "Personal Info";
                break;
            case 2:
                this.selectedTabName = "Payment Info";
                break;
            default:
                break;
        }
    }

}

Я создам индикатор внутри tab1, tab2, tab3, например:

ngOnInit(){
        this.loadCountries();
    }
loadCountries(){
        var _this = this;
        if (!this.conn.getConnectionStatus()) {
            Toast.makeText("Please check your internet connection").show();
            return;
        }
        Indicator.showIndicator("Loading Please Wait...");
        this.authenticationService.Get_Countries_List().then(function(response){
            _this.renderData(response);
           }
       });
    }



renderData(values){
this.authenticationService.Get_States_List(_this.dataService.userProfile.contact[0].country).then(function(response){
                        Indicator.hideIndicator();
       }
    }   

1 Ответ

0 голосов
/ 18 декабря 2018

Вы, кажется, создаете разные экземпляры, показывая и скрывая индикатор.Вы должны вызвать hide того же LoadingIndicator экземпляра, для которого вы вызывали show.

Источник: https://github.com/NathanWalker/nativescript-loading-indicator/issues/58

Также вот пример , который демонстрирует, как вы можете сделать это без плагина и всегда сохранять ссылку на текущий индикатор загрузки, независимо от того, сколько раз вы вызываете show / hide одновременно.Вы даже можете применить аналогичную логику для поддержки вашего LoadingIndicator экземпляра с помощью плагина.См. ui-helper.ts и home-page.ts.

К вашему сведению, по своей природе платформа iOS, похоже, использует синглтон, поэтому она работает там, даже если вы создаете несколько LoadingIndicator.Но в Android новый диалог прогресса создается каждый раз, когда вы вызываете show, поэтому вы должны вызывать hide для того же экземпляра.

Кроме того, поскольку вы используете Angular, я бы посоветовал вам воспользоваться преимуществами фреймворка, такими как HttpПерехватчики, поэтому вам не придется создавать / обрабатывать индикатор для каждой вкладки или каждого вызова API в отдельности.

...