Как получить активную в данный момент активность? - PullRequest
0 голосов
/ 21 апреля 2011

Мое приложение имеет несколько действий.Мне нужно определить, какой из них в настоящее время активен (или какой-либо другой термин, активный, передний план, показ, ...).Есть ли способ сделать это?

(я думал, что это простая и часто используемая вещь, но после полчаса поиска ничего не получил.: - (

(RunningTaskInfo.topActivity () возвращает только ComponentName, но мне нужна его ссылка, так что это не поможет.)

(Решение методом грубой силы - отслеживать ссылку на деятельность в глобальной переменной. Но этодолжно быть сделано в каждом onResume (). Это ужасно ИМО.)

Ответы [ 3 ]

0 голосов
/ 21 апреля 2011

Я не почти эксперт, но мне нужно было сделать что-то вроде того, что вы упомянули, чтобы текущая подсвеченная кнопка была выделена (нижняя панель).Я думаю, что я использовал onResume () в каждом действии, как вы упомянули, чтобы сохранить его в переменной класса приложения.Я уверен, что есть лучший способ, хотя

Редактировать: на самом деле, я просто перечитал то, что вы предложили ... да, я согласен с comonsware, хранить фактическую ссылку на действие плохо.Почему вы не можете просто сохранить строковую переменную с именем текущей деятельности?вот что я сделал, чтобы отслеживать и выделять соответствующую кнопку

0 голосов
/ 12 мая 2011

Кто бы ни сталкивался с этой проблемой, т. Е. Вам нужна ссылка на текущую активную деятельность, здесь нет реального решения.Единственный способ - вы сами это отслеживаете, используя глобальный.Да, использование глобального - действительно не лучший способ для программирования на Android, но я думаю, что это менее затратно.

Вот что я сделал:

Расширение всей моей деятельности из одной базовой деятельности:MotherOfAllActivities.

public class MotherOfAllActivities extends Activity {
    public void onCreate(...) {
        globalCurrentActivity = this;
        ........
    }

    public void onResume() {
        globalCurrentActivity = this;
        ........
    }

    public void onPause() {
        if (globalCurrentActivity == this)
            globalCurrentActivity = null;
    }

    // And, don't forget about onActivityResult(). It can come before onResume()
    // of the calling activity and after onPause() of the called activity. That is,
    // there is a window when globalCurrentActivity is null.
    public void onActivityResult() {
        globalCurrentActivity = this;
    }
}

Не стреляйте в меня, если вам не нравится этот ответ.Я просто пытаюсь поделиться с людьми тем, что работает для меня, по крайней мере, пока.

0 голосов
/ 21 апреля 2011

Есть ли способ сделать это?

Не совсем.

(Грубое решение состоит в том, чтобы отслеживать ссылку на действие в глобальной переменной. Но это должно быть сделано в каждом onResume (). Это уродливо ИМО.)

Это также рецепт для утечек памяти.

Лично я бы нашел лучший способ решить любую проблему, которую, по вашему мнению, вы решаете, с помощью действия "в настоящее время активирован [sic]".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...