Xamarin活动OnBackPressed()没有开火

时间:2017-01-23 06:41:51

标签: android xamarin xamarin.android

我有一个Xamarin安卓应用,它有两个活动。第一个是登录活动(LoginActivity),当成功登录时,它会调用StartActivityMainActivity)。我试图阻止MainActivity在按下后退按钮时导航回LoginActivity,并试图覆盖OnBackPressed()但是此方法永远不会在MainActivity上触发。我在LoginActivity中覆盖了完全相同的方法。

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 个答案:

答案 0 :(得分:1)

您可以在activity属性中指定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