ActivityGroup не обрабатывает ключ возврата для ListActivity - PullRequest
1 голос
/ 29 сентября 2010

Я использую ActivityGroup для порождения нескольких действий и переключения представлений из одной вкладки в TabActivity.

Когда я нажимаю клавишу возврата, этот метод вызывается внутри моей ActivityGroup

public void back() {  
        if(history.size() > 0) {  
            history.remove(history.size()-1);
            if (history.size() > 0)
             setContentView(history.get(history.size()-1)); 
            else
              initView();
        }else {  
            finish();  
        }  
    }  

этот метод позволяет мне сохранить стек моих действий и вернуться к предыдущему, когда нажата клавиша возврата.

это работает хорошо на всех моих вложенных действиях, за исключением ListActivity, где нажатие на клавишу возврата просто выйдет из приложения.

Ответы [ 3 ]

4 голосов
/ 11 января 2011

В ActivityGroup, когда ListActivity находится в фокусе, onKeyDown () из ActivityGroup не вызывается, вызывается только дочерний (ListActivity) onKeyDown () Чтобы убедиться, что onGeyDown () из ActivityGroup вызывается, нам нужно вернуть false из onKeyDown () ListActivity. После внесения этого изменения я могу получать ключевые события

2 голосов
/ 29 сентября 2010

Я знаю, что вы имеете в виду ... Я столкнулся с этой проблемой несколько недель назад.Я также знаю, что это досадная ошибка, и я усвоил урок: я никогда не буду использовать этот подход!Таким образом, в основном, чтобы исправить это, вам придется сделать несколько обходных путей к вашему коду.Например, я исправил эту проблему с одним из моих действий, добавив этот код в действие:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && StatsGroupActivity.self != null) {
        StatsGroupActivity.self.popView();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

Обратите внимание, что мой ActivityGroup называется StatsGroupActivity и выглядит так:

public class StatsGroupActivity extends GroupActivity{

    /**
     * Self reference to this group activity
     */
    public static StatsGroupActivity self;

    public void onCreate(Bundle icicle){
        super.onCreate(icicle);
        self = this;
        // more stuff
    }
}
0 голосов
/ 05 июля 2011

@ Cristian

Я использую обычную активность вместо ListActivity, но с заполненным списком ListView у меня возникла та же проблема.

Я реализовал onBackPressed только в своей Activity вместо onKeyDown для вызова той же функции back (), которую вызвала MyActivityGroup.

@Override  
public void onBackPressed() {
    MyActivityGroup.group.back();  
    return;  
}

группа - это статическое поле в MyActivityGroup.

public static MyActivityGroup group; 

Функция back () будет такой же, как и предоставляемая yann.debonnel.

Я не знаю, является ли это тем же случаем для вашей ListActivity, не проверял. Но в моем случае это сработало.

...