#android
#Android
Вопрос:
Давайте рассмотрим простое приложение для доступа к БД с двумя действиями:
- A — список записей из базы данных
- B — форма ввода для ввода новых данных в БД с двумя кнопками: Сохранить / Отменить
Приложение запускается с A (список), а от пользователя может перейти к B (форма ввода).
Чтобы сделать ввод новых данных более эффективным, я создал виджет для перехода непосредственно к B (PendingIntent).
Наблюдаемое поведение приложения выглядит следующим образом:
- Если первым действием пользователя является виджет (пустой задний стек) => приложение открывается B, и когда пользователь нажимает Сохранить или Отменить, действие завершается, и фокус возвращается на рабочий стол Android.
- Если основное приложение было запущено ранее (A находится в обратном стеке) => B по-прежнему правильно открывается из виджета, однако, когда пользователь нажимает Сохранить или отменить, фокус возвращается к
Поведение, описанное в 2, нормально, когда пользователь запускает B из A. Однако я хотел бы избежать этого, когда B запускается из виджета.
Какие-либо подсказки?
Ответ №1:
У меня ситуация, когда мне нужно сделать что-то подобное. Мое быстрое решение состояло в том, чтобы добавить "EXTRA_LAUNCHED_BY_WIDGET"
дополнение к намерению, запущенному виджетом. Затем в моей деятельности я рассматриваю это как особый случай.
Мне нужно было переопределить поведение кнопки возврата, но вы могли бы так же легко использовать этот случай в другом месте, например, в других переопределенных методах активности.
@Override
public void onBackPressed()
{
Bundle extras = getIntent().getExtras();
boolean launchedFromWidget = false;
if (extras.containsKey("EXTRA_LAUNCHED_BY_WIDGET"))
{
launchedFromWidget = extras.getBoolean("EXTRA_LAUNCHED_BY_WIDGET");
}
if (launchedFromWidget)
{
// Launched from widget, handle as special case
}
else
{
// Not launched from widget, handle as normal
}
}