问题
I have the following method in an Xamarin.Forms.ContentPage
wired to a button click event
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());
}
}
}
On the following line of code Navigation.PushAsync(new HomePage());
, I am getting the following exception while debugging:
PushAsync is not supported globally on Android, please use a NavigationPage
How do I resolve this issue using a Xamarin.Forms.NavigationPage
object?
回答1:
You are calling "PushAsync":
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
private void btnCourseList_Clicked(object sender, EventArgs e)
{
Navigation.PushAsync(new PageB());
}
}
but you did not start the NavigationPage, which normally is done in the App.cs class, or at least it should be started before any call to "PushAsync":
MainPage = new NavigationPage(new PageA());
回答2:
In app.xaml.cs file,
Replace
MainPage = new <namespace>.MainPage();
With
MainPage = new NavigationPage(new <namespace>.MainPage());
Then Use
await Navigation.PushAsync(new NavigationPage(new MainPage2()));
回答3:
You need to enclose your LoginPage in a NavigationPage. This will fix your error, but will leave you with the LoginPage contained on your navigation stack.
An alternate approach would be to make your HomePage the root of the application, then display the LoginPage modally on top of it. Only when the user successfully logs in do you dismiss the LoginPage modal so they can see the HomePage.
回答4:
I only change pushAsync with 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:
Solved I did like that way... First make setting in "Main App Page" then do in "Content page" to go other page.
回答6:
I got one problem mixing Rg.Plugins.Popup and ZXin.Net.Mobile Scanner.
Calling the scanner inside a popup was triggering this same error. PushModalAsync solved the error, but the popup was over the scan so easy solution was make the popup invisible until the scanner was on.
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);
}
来源:https://stackoverflow.com/questions/24621814/pushasync-is-not-supported-globally-on-android-please-use-a-navigationpage-xa