Android - есть ли способ определить, к какому намерению вас приведет кнопка «Назад»?

1

Я перезаписываю эту функцию:

    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event)

Но есть ли способ сказать, какой намерен или на экране появится кнопка "Назад"?

  • 1
    Я не понимаю У действия уже есть onBackPressed() вызов onBackPressed() который в основном вызывает finish() . Все, кроме «возвращения», покажется очень неестественным для пользователя Android.
  • 1
    Пожалуйста, не трогайте кнопку назад. Это огромный беспорядок в UX, нет необходимости еще больше усложнять жизнь пользователям. ( commonsware.com/blog/2011/07/21/back-means-back.html ; iamtherockstar.com/blog/2011/09/13/i-hate-android-back-button ; androiduipatterns.com/2011/12 /… )
Теги:

3 ответа

2
Лучший ответ

Возможно, вам лучше добавить информацию в намерение, которое запустило вашу текущую деятельность.

Активность А

    Intent lIntent = new Intent();
    lIntent.putExtra( EXTRAS_ACTIVITY_KEY, ACTIVITY_IDENTIFIER );
    startActivitiy...

Активность B

    public boolean onKeyUp(int keyCode, KeyEvent event){
           Intent lIntent = getIntent();
           if(lIntent.hasExtra(EXTRAS_ACTIVITY_KEY) &&
                   ACTIVITY_IDENTIFIER.equals(lIntent.getStringExtra(EXTRAS_ACTIVITY_KEY)){
                   // Great we know that it was a Activity A...
                   ... your code here....
           }
2
List<CharSequence> theActivityTrace = getActivityTrace(null);

это функция, возвращающая список трассировок действий, которые находятся в стеке, и вы можете вызвать метод ниже, как указано выше amd mAct, - это ваш текущий контекст.

public LinkedList<CharSequence> getActivityTrace(LinkedList<CharSequence> aTrace) {
    if (aTrace==null)
        aTrace = new LinkedList<CharSequence>();
    aTrace.add(mAct.getLocalClassName()+" ("+mAct.getTitle()+")");
    if (mAct.getCallingActivity()!=null)
        aTrace.add(mAct.getCallingActivity().toString()+" ("+mAct.getIntent().toString()+")");
    else if (mAct.getCallingPackage()!=null)
        aTrace.add(mAct.getCallingPackage().toString()+" ("+mAct.getIntent().toString()+")");

    return aTrace;
}
1

Вы можете получить его из стека активности с помощью ActivityManager.

  • 0
    звучит сложно. Это будет подвержено ошибкам? Как бы Вы это сделали?
  • 0
    Очень подвержен ошибкам, но это то, что вы пытаетесь сделать. Тем не мение; это не должно быть необходимым, это должно подразумеваться через присутствие пользовательского интерфейса, куда они направляются, поскольку, в конце концов, ВЫ контролируете, как это работает в ВАШИХ действиях.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню