Ведение состояния дочерних действий в TabGroupActivity - PullRequest
2 голосов
/ 17 декабря 2011

Я следовал этому учебнику для моего приложения.

У меня есть: Tab 1: Tabgroupactivity1> (startchildactivity) MainActivty> (startchildactivity) ListActivity> (startchildactivity) DetailActivity

аналогично у меня есть две другие вкладки.

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

Я тоже пыталсядействие startchild с SINGLE_TOP и SINGLE_TASK, но в этом только один раз я могу пройти поток

второй раз, когда он не вызывает следующее (следующее / дочернее) действие

Итак, как я могу сохранить текущее состояние активности, пока оно требует активности ребенка и возврата ??

Я использую следующие намерения по списку списков:

Intent myintent = new Intent(getParent(),Second.class);
myintent.putExtra("id",favadapter.getItem(position).id.toString());
TabGroupActivity parentFav = (TabGroupActivity)getParent();
parentFav.startChildActivity("FavActivity", myintent);

1 Ответ

2 голосов
/ 21 марта 2012

На самом деле у TabGroupActivity есть проблема в Android 2.1 и 2.2, действия, которые не удаляются должным образом из стека, заставляют наш экземпляр перезапускаться каждый раз.

Чтобы преодолеть эту проблему, мы используем SINGLE_TOP и SINGLE_TASK, даже это вызывает еще одну проблему - запуск только одного экземпляра не во второй раз, потому что в дочернем финише мы делали так,

Intent lastIntent = manager.getActivity(lastId).getIntent();
        Window newWindow = manager.startActivity(lastId, lastIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP));
        setContentView(newWindow.getDecorView());

означает, что он удаляет все намерения lastID и приносит последнее, потому что ваш lastId (который используется при запуске действия .startChildActivity("FavActivity", myintent);) одинаков для нескольких экземпляров.

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

Например,

Intent myintent = new Intent(getParent(),Second.class);
myintent.putExtra("id",favadapter.getItem(position).id.toString());
TabGroupActivity parentFav = (TabGroupActivity)getParent();
parentFav.startChildActivity("FavActivity"+System.currentTimemillis(), myintent);
...