Вернуться к предыдущему действию из другого действия, не знаю, где находится активность в стеке - PullRequest
2 голосов
/ 15 июня 2011

У меня есть TabActivity, который является "основой" Activity в моем приложении.Из TabActivity пользователь может перемещаться по новым действиям, которые не являются частью исходного TabHost (я не возиться с TabGroups или чем-то подобным).

В моем приложении также есть меню глобальных опций, из которого пользователь должен иметь возможность вернуться к исходному TabActivity и выбрать определенную вкладку.Например, если пользователь выбрал самый левый пункт меню параметров, он перейдет на крайнюю левую вкладку в исходном TabActivity.

Как мне выполнить это поведение?Я не хочу начать новый TabActivity, потому что исходный TabActivity имеет распространенные данные, такие как точки карты и ListView.В идеале я хотел бы вернуться к этому конкретному TabActivity.Это движение также может происходить в любой точке жизненного цикла, например:

Оригинал TabActivity -> Активность1 -> Активность2 -> Активность3 -> Активность n -> Вернуться к оригиналу TabActivity

Оригинал TabActivity -> Деятельность1 -> Вернуться к оригиналу TabActivity

Между навигацией может быть любое количество действий.Поэтому вызов finish() в текущем действии не удовлетворит это (насколько я знаю ...).

Мои вопросы / проблемы:

  1. Прежде всего, какВыполните это.
  2. Возможно , что оригинал TabActivity может быть удален из стека из-за памяти, правильно?Если так, как с этим бороться?Я предполагаю, что если бы я нашел способ найти оригинал TabActivity, я мог бы просто сделать проверку на ноль, и если его там нет, начать новый TabActivity.

1 Ответ

4 голосов
/ 17 июня 2011

понял это.Вы должны использовать launchMode="singleTask" в своем манифесте для конкретного Activity, на который вы хотите переключиться обратно.В соответствии с документами для разработчиков это возвращает к этому конкретному Activity, если он существует.

Итак, в моем Манифесте у меня есть:

    <activity
        android:name=".MainTabsActivity"
        android:launchMode="singleTask"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.NoTitleBar" >
    </activity>

Тогда,в любом Activity, где вы хотите вернуться к этому TabActivity, просто позвоните обычному Intent.Вы также можете использовать putExtra(), чтобы сообщить TabActivity о переходе на новую вкладку.

В подгруппе действий:

        Intent mainTabsSearchIntent = new Intent(this, MainTabsActivity.class);
        mainTabsSearchIntent.putExtra("tabval", 0);
        startActivity(mainTabsSearchIntent);

Это либо запустит новую MainTabsActivity, еслистек не имеет ни одного, или переключается обратно на старый экземпляр из-за параметра launchMode="singleTask".

Чтобы обеспечить возможность переключения вкладок, переопределите onNewIntent(Intent intent) в вашем основном TabActivity следующим образом:

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    Log.d(MyApplication.TAG, "Bringing this Activity back!");

    Bundle extras = intent.getExtras();
    if (extras != null) {
        tabHost.setCurrentTab(extras.getInt("tabval"));
        Log.d(MyApplication.TAG, "Switching to tab " + extras.getInt("tabval"));
    }
}

Надеюсь, это поможет кому-то, у кого похожая проблема.

...