我有一个Xamarin安卓应用,它有两个活动。第一个是登录活动(LoginActivity
),当成功登录时,它会调用StartActivity
(MainActivity
)。我试图阻止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()
?
提前感谢您的时间。
答案 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