it-swarm.com.de

PushAsync wird auf Android nicht global unterstützt. Verwenden Sie eine Navigationsseite - Xamarin.Forms

Ich habe die folgende Methode in einem Xamarin.Forms.ContentPage Mit einem Tastenklickereignis verbunden

public class LoginPage : ContentPage
{
    private Button _loginButton = null;
    private Entry _PasswordInput = null;
    private Entry _UsernameInput = null;

    public LoginPage()
    {
        _UsernameInput = new Entry { Placeholder = "Username" };
        _PasswordInput = new Entry { Placeholder = "Password", IsPassword = true };

        _loginButton = new Button
        {
            Text = "Login",
            BorderRadius = 5
        }

        _loginButton.Clicked += LogIn;

        Content = new StackLayout 
        {
            VerticalOptions = LayoutOptions.Center,
            Children = 
            {
                 _UsernameInput, _PasswordInput, _loginButton, 
            },
            Spacing = 15
        };
    }

    public async void LogIn(object sender, EventArgs eventsArgs)
    {
        //do authenticate stuff here
        SSO.MyAuthentication client = new SSO.MyAuthentication();

        bool isAuthenticated = client.Authenticate(_UsernameInput.Text, _PasswordInput.Text);

        if(isAuthenticated)
        {
             //Push home page to top of navigation stack
             Navigation.PushAsync(new HomePage());
        }
    }
}

In der folgenden Codezeile Navigation.PushAsync(new HomePage()); wird beim Debuggen die folgende Ausnahme angezeigt:

PushAsync wird auf Android nicht global unterstützt. Verwenden Sie eine Navigationsseite

Wie löse ich dieses Problem mit einem Xamarin.Forms.NavigationPage - Objekt?

50

Sie rufen "PushAsync" auf:

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
    }

    private void btnCourseList_Clicked(object sender, EventArgs e)
    {
        Navigation.PushAsync(new PageB());
    }
}

sie haben jedoch die Navigationsseite nicht gestartet, was normalerweise in der App.cs-Klasse erfolgt, oder sie sollte zumindest vor jedem Aufruf von "PushAsync" gestartet werden:

MainPage = new NavigationPage(new PageA());
98
Reader Man San

In der Datei app.xaml.cs

Ersetzen

 MainPage = new <namespace>.MainPage();

Mit

 MainPage = new NavigationPage(new <namespace>.MainPage());

Dann benutze

 await Navigation.PushAsync(new NavigationPage(new MainPage2()));
26
Amar Mathur

Sie müssen Ihre LoginPage in eine NavigationPage einschließen. Dies behebt Ihren Fehler, hinterlässt jedoch die LoginPage auf Ihrem Navigationsstapel.

Eine andere Möglichkeit wäre, Ihre HomePage zum Stammverzeichnis der Anwendung zu machen und dann die LoginPage modal darüber anzuzeigen. Erst wenn sich der Benutzer erfolgreich anmeldet, schließen Sie das LoginPage-Modal, damit er die HomePage sehen kann.

13
Jason

Ich ändere nur pushAsync mit pushModalAsync :)

public async void LogIn(object sender, EventArgs eventsArgs)
{
    //do authenticate stuff here
    SSO.MyAuthentication client = new SSO.MyAuthentication();

    bool isAuthenticated = client.Authenticate(_UsernameInput.Text, _PasswordInput.Text);

    if(isAuthenticated)
    {
         //Push home page to top of navigation stack
         //Navigation.PushAsync(new HomePage());
           Navigation.PushModalAsync(new HomePage());
    }
}
5
T M

Gelöst habe ich das so ... Erst in "Main App Page" einstellen, dann in "Content Page", um auf eine andere Seite zu gelangen.

enter image description here

0
Ayaat Shifa

Ich habe ein Problem beim Mischen von Rg.Plugins.Popup und ZXin.Net.Mobile Scanner.

Der Aufruf des Scanners in einem Popup löste denselben Fehler aus. PushModalAsync hat den Fehler behoben, aber das Popup war über dem Scan, so dass die einfache Lösung das Popup unsichtbar machte, bis der Scanner eingeschaltet war.

    private async void FrmQrCode_Tapped(object sender, EventArgs e)
    {
        ZXingScannerPage scanPage = new ZXingScannerPage();
        scanPage.OnScanResult += (result) =>
        {
            scanPage.IsScanning = false;
            ZXing.BarcodeFormat barcodeFormat = result.BarcodeFormat;
            string type = barcodeFormat.ToString();
            Device.BeginInvokeOnMainThread(() =>
            {
                Navigation.PopModalAsync();

                this.IsVisible = true;

                Token = result.Text.Trim();
            });
        };
        this.IsVisible = false;
        await Navigation.PushModalAsync(scanPage);
    }
0
Faruk A Feres