【问题标题】:Xamarin forms navigation backpress prevent on logoutXamarin 在注销时形成导航回压防止
【发布时间】:2019-01-23 06:14:28
【问题描述】:

我正在创建一个 xamarin 表单应用程序。我的应用程序流程是 LOGIN-->MAINPAGE。 Mainpage 是一个 Bottombarpage,包含三个选项。 1.DashBoard、2.Settings、3.User。 我在仪表板类工具栏上添加了一个注销图标。我的问题是每当用户单击注销时,屏幕将导航到登录页面。但是,如果用户按下后退按钮,它将转到上一个主页。我想禁用它。

我从登录页面导航到主页是这样的。

 Navigation.InsertPageBefore(new MainPage(), this);
   await Navigation.PopAsync();

我的 App.xaml.cs - 我使用验证导航到主页

if (Settings.Generalsettings != string.Empty)
            {

                MainPage = new NavigationPage(new MainPage());
            }
            else {
                MainPage = new NavigationPage(new Login());

            }

我的注销按钮点击 Dashboard.cs

   private  void logout_Clicked(object sender,EventArgs e)
        {

                    Settings.ClearAllData();           
                    Navigation.PushAsync(new Login());               

        }

【问题讨论】:

  • 设置 MainPage = new NavigationPage(new Login());在 logout_Clicked 事件上
  • 兄弟,注销按钮是在仪表板的工具栏上创建的。主页是底部栏
  • 它将再次重定向并添加到新的导航堆栈顺序“登录页面”中
  • 为什么要使用 await Navigation.PopAsync();从登录页面导航到主页。你应该像这样使用 Navigation.PushAsync(new MainPage());
  • 兄弟,因为我也想阻止登录后返回登录寻呼机

标签: xamarin.forms


【解决方案1】:

有两种方法,如果您使用的是视图模型,那么您可以像这样简单地导航

await _navigationService.NavigateAsync("app:///NavigationPage/Splash");

其次,如果您只使用表单,那么您可以将主页设置为登录页面

MainPage = new LoginPage();

这将清除您的后台堆栈并导航到特定页面。

【讨论】:

  • 我改变了,但是我在登录页面导航时遇到错误,因为 System.InvalidOperationException:Android 上不支持 PushAsync,请使用 NavigationPage。
  • Clear Backstack 并使用 Navigation.PushAsync(new Login()); 导航到登录页面;
【解决方案2】:

这里再次推送登录页面,因为登录页面已经在导航堆栈中。所以当你点击返回按钮时,它会显示登录页面。你可以这样做 MainPage = new NavigationPage(new MainPage()); 从 App.Xaml.cs 页面调用

public App()
    {
        InitializeComponent(); MainPage = new LoginPage();

}

  // and when login button pressed from login page do like this
private  void loginButton_Clicked(object sender,EventArgs e)
    {
        NavigationPage navigationRootPage = new NavigationPage(new MainPage());
        navigationRootPage.BarTextColor = Color.White;
        MainPage = navigationRootPage;

    }

//当你点击注销按钮时

private  void logout_Clicked(object sender,EventArgs e)
    {

                Settings.ClearAllData();           
                MainPage = new LoginPage();             

    }

【讨论】:

  • 兄弟感谢您的努力。正如KK所说,我刚刚清除了堆栈。现在工作正常。顺便说一句,谢谢你的时间兄弟
  • 很好,我仍然没有遇到这类问题,但它在功能上可能很有用...清除导航堆栈@K K
  • 是的..谢谢兄弟
猜你喜欢
  • 2019-12-19
  • 1970-01-01
  • 2012-05-17
  • 2011-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-29
  • 2014-02-09
相关资源
最近更新 更多