我想要實作的是應用程式以 a 開頭,login page登錄后Main page應該顯示。從那里可以打開其他頁面并允許正常導航。
但是,我不希望用戶導航回登錄頁面。登錄后main page必須是導航的根。
我在谷歌上找到了很多關于如何做的資訊,但它們似乎都不適合我。主要是我被告知main page通過MainPage直接設定為我的根來創建我的根,PageMain現在也在我的代碼中,但它不起作用。
其他方法應該是login page從導航堆疊中洗掉,但我無法讓它作業。我找到的示例編譯但在運行時它們使我的應用程式崩潰,說我無法洗掉當前頁面或找不到我正在洗掉的頁面。
這是我的代碼:
我的應用程式以 開頭PageLogin,現在它只有一個按鈕,當您單擊它時,它會打開我的PageMain
private void ButtonLogin_Clicked(object sender, EventArgs e)
{
// almost does what I want
Application.Current.MainPage = new PageMain();
// almost does what I want
// make PageMain the new main page, so you cannot go back to the login screen
//Application.Current.MainPage = new NavigationPage(new PageMain());
// error you cannot remove the page you are on
//var _navigation = Application.Current.MainPage.Navigation;
//var _lastPage = _navigation.NavigationStack.LastOrDefault();
////Remove last page
//_navigation.RemovePage(_lastPage);
////Go back
//_navigation.PopAsync();
// error page does not exists
//Application.Current.MainPage.Navigation.RemovePage(this);
//Navigation.PopAsync(); not supported on android
//Navigation.RemovePage(this); not supported on android
}
MainPage 在 App.xaml.cs 中是這樣設定的
public partial class App : Application
{
public App()
{
InitializeComponent();
//MainPage = new NavigationPage(new Pages.PageLogin());
MainPage = new Pages.PageLogin();
}
PageMain到目前為止,上面的代碼可以很好地打開我的頁面。
現在,當我點擊back button該設備時,我的應用程式最小化(或者不管它在Android上可以隱藏自身)
這是好事,因為我不希望用戶回到login form
但是,當我現在點擊recent apps該按鈕設備,然后單擊我的應用程式使其回到前臺,它回傳到登錄表單。
看這個視頻

我怎樣才能避免這種情況?
編輯
我嘗試設定IsTabStop為false,但也沒有結果
public PageLogin()
{
InitializeComponent();
this.IsTabStop = false;
ButtonLogin.Clicked = ButtonLogin_Clicked;
}
uj5u.com熱心網友回復:
這是一個純粹的 Android 行為,與 Xamarin.Forms 無關,當應用程式的導航堆疊為空時按下后退按鈕時,取決于運行的 Android 版本,它的行為如下:
- Android 11 及更低版本:系統完成活動。
- Android 12 及更高版本:
系統將活動及其任務移至后臺,而不是完成活動。此行為與使用主頁按鈕或手勢導航出應用程式時的默認系統行為相匹配。
在大多數情況下,這種行為意味著用戶可以更快地從熱狀態恢復您的應用程式,而不必從冷狀態完全重新啟動應用程式...
來源:根啟動器活動的背壓行為。
在您的情況下,當您按下主螢屏上的后退按鈕時,Android 完成了活動,如果您想確認這一點,請在您的AppShell.cs建構式上設定一個斷點,否則MainActivity.cs/OnCreate()您會注意到:
- 在主螢屏上按下主頁按鈕并從 android 應用程式堆疊恢復應用程式:由于應用程式活動被保存,因此不會命中任何斷點。實際上 Android 會呼叫
MainActivity.OnResume(). - 按下后退按鈕,您將遇到斷點,因為活動已終止,您正在重新開始。
一些潛在的解決方案
- 在本地資料庫 (SQLite) 或檔案上保存并保留日志狀態的更新記錄,在應用程式啟動時讀取此 bool 并相應地顯示或不顯示登錄頁面(設定主頁)。
- 如果你沒有在點擊回傳按鈕,覆寫想您的應用程式退出
OnBackPressed()在MainActivity一個空的代碼:
public override void OnBackPressed()
{
}
- 將您的應用程式放在后面(暫停它)而不是終止它:
public override void OnBackPressed() => MoveTaskToBack(true);
更多關于OnBackPressed()
相關問題
- 從最近的應用程式中洗掉后退按鈕或主頁或應用程式時會發生什么
- 您如何根據登錄狀態/角色限制/控制用戶可以訪問的導航路線?
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/393320.html
標籤:安卓 沙马林 xamarin.forms 安卓系统 xamarin.forms.shell
