Android: Деактивирайте или заменете OnBackPressed на вътрешната активност

Използвайки Xamarin за Android, използвам компонент на трета страна, за да създам заключен екран чрез PIN за различни дейности в моето приложение.

Когато потребителят влезе за първи път, той получава подкана да създаде ПИН. Това задейства активността на третата страна за създаване на щифтове. Ако потребителят натисне бутона за връщане назад, докато извършва тази дейност, той се връща към началния екран на моето приложение и заобикаля създаването и валидирането на ПИН.

Нямам достъп за промяна на кода на вътрешната дейност на трета страна.

Също така стартирам дейността чрез извикване на метод към компонента, а не чрез използване на извикването StartActivity.

Имам нужда от начин да деактивирам или отменя събитието onBackPressed за тези вътрешни дейности. Има ли начин да деактивирате бутона за връщане назад за цялото приложение и след това да го активирате отново, когато потребителят се върне от компонента на трета страна?

Някакви идеи за това как мога да деактивирам събитието OnBackPressed за дейност, за която нямам права за модификация?

PS: Компонентът е Xamarin Lock Screen.


person Mason    schedule 06.03.2014    source източник
comment
Във вашата дейност вие трябва по някакъв начин да откривате резултата от активността на щифта. Във всеки случай, когато тази дейност се затвори и вашата дейност бъде извикана обратно, трябва да преминете през метода onResume(), не можете ли да контролирате, че ПИН кодът не е добавен там?   -  person Makerhack    schedule 07.03.2014


Отговори (1)


Ако можете да използвате дейността на компонента на третата част като основен клас за вашата дейност или да я разширите, създавайки свой собствен клас, тогава бихте могли да замените OnBackPressed по следния начин:

public class yourNewActivity: ThirdyPartActivityClass{

//...

public override void OnBackPressed()
    {
        if (BackEventEnabled)
             base.OnBackPressed();
     }

}

където във вашия клас public bool BackEventEnabled = true; (или невярно за деактивиране);

Преди да стартирате дейността с метода на компонента, който можете да направите

BackEventEnabled = false;

и след

BackEventEnabled = true;

Не знам дали все пак може да помогне на вас или на някой друг, дори да даде отправна точка за по-добри идеи или заобиколно решение/хак. Надявам се.

person Daniele D.    schedule 23.02.2015