2017-01-23 60 views
-2

我有一個Xamarin Android應用程序,它有兩個活動。首先是登錄活動(LoginActivity),當登錄成功時,它會調用StartActivityMainActivity)。我嘗試阻止MainActivity返回到LoginActivity,當後退按鈕被按下並試圖覆蓋OnBackPressed()但是此方法從未在MainActivity上觸發。我有覆蓋在LoginActivity完全觸發相同的方法。Xamarin活動OnBackPressed()不開火

public override void OnBackPressed() 
{ 
    // Do nothing 
    string test = ""; // Setting a breakpoint here and it's never hit. 
} 

我也試着重寫OnKeyDown()也從來沒有在MainActivity觸發。

public override bool OnKeyDown(Keycode keyCode, KeyEvent e) 
{ 
    if (keyCode == Keycode.Home) 
    { 
     return false; 
    } 
    return base.OnKeyDown(keyCode, e); 
} 

我可以看到,被解僱時,我按下MainActivity後退按鈕的唯一方法是OnPause()

有什麼特別的,我從MainActivity丟失,讓我覆蓋OnBackPressed()

提前感謝您的時間。

回答

1

您可以在活動屬性中指定NoHistory以防止將登錄活動導回到。例如:
登錄活動:

namespace Xamarin.Droid.NoHistory 
{ 
    [Activity(Label = "LoginActivity", MainLauncher = true, Icon = "@drawable/icon", NoHistory = true)] 
    public class LoginActivity : Activity 
    { 
     protected override void OnCreate(Bundle savedInstanceState) 
     { 
      base.OnCreate(savedInstanceState); 

      SetContentView(Resource.Layout.LoginLayout); 

      Button startMainActivityButton = FindViewById<Button>(Resource.Id.login_button); 
      startMainActivityButton.Click += (sender, args) => 
      { 
       StartActivity(typeof(MainActivity)); 
      }; 

     } 

    } 
} 

主要活動

namespace Xamarin.Droid.NoHistory 
{ 
    [Activity(Label = "MainActivity")] 
    public class MainActivity : Activity 
    { 
     protected override void OnCreate(Bundle bundle) 
     { 
      base.OnCreate(bundle); 

      SetContentView(Resource.Layout.Main); 
     } 
    } 
} 

這兩個活動的代碼,並幫助你甚至更多,我已經加入這個例子GitHub在這裏:https://github.com/tiger4589/Xamarin.Droid.NoHistoryExample

+0

謝謝保羅。 MainActivity上有什麼要求可以使用?我向LoginActivity添加了NoHistory屬性,但是當我按下後退按鈕時,它仍將導航返回到LoginActivity。 – JMG

+0

@JMG我已經更新了我的答案,向您展示了兩個活動代碼,並且添加了我在GitHub上嘗試的示例,隨時檢查這一切。 –

+0

再次感謝保羅。這在我的Galaxy S6 Edge上正常工作,但是在失敗的棒棒糖(5.1)設備上。在5.1上,按回來關閉示例應用程序中的應用程序。也許5.1應該有一些不兼容或者bug。 – JMG