2017-01-23 3 views
-2

У меня есть приложение для андроида Xamarin, которое имеет два вида деятельности. Первый - это активность входа (LoginActivity), которая при успешном входе в систему вызывает StartActivity (MainActivity). Я пытаюсь не допустить, чтобы MainActivity переместился обратно на LoginActivity при нажатии кнопки «Назад» и попытался переопределить OnBackPressed(), однако этот метод никогда не срабатывает на MainActivity. У меня есть переопределенный тот же метод в LoginActivity, который срабатывает отлично.Xamarin Activity 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 для этого? Я добавил атрибут NoHistory в LoginActivity, однако он все еще переводит меня обратно в LoginActivity, когда я нажимаю кнопку «Назад». – JMG

+0

@JMG Я обновил свой ответ, чтобы показать вам оба кода действий, и я добавил пример, который я попробовал в GitHub, не стесняйтесь проверить все. –

+0

Еще раз спасибо. Это отлично работает на моем Galaxy S6 Edge, однако на устройстве Lollipop (5.1) он терпит неудачу. В 5.1, нажатие назад закрывает приложение в вашем примере приложения. Должна быть какая-то несовместимость или ошибка с 5.1, возможно. – JMG

Смежные вопросы