Android: захват возвращения активности - PullRequest
81 голосов
/ 16 января 2009

У меня есть вопрос относительно запуска новых действий. Это сводится к этому. У меня есть 3 вкладки в представлении

A) contains gMap activity
 B) camera activity
 C) some random text fields.

Требуется, чтобы приложение работало в портретном режиме.

Все 3 вкладки работают должным образом, за исключением поверхности предварительного просмотра камеры (B). Поворачивается на 90 градусов. Единственный способ исправить это - настроить приложение на альбомную, в котором все мои вкладки выбрасываются, и это практически не работает.

Мое решение таково: заменить

активность моей камеры с обычной активностью, которая пуста, за исключением

Intent i = new Intent(this,CameraActivity.class);
    startActivity(i);

Это запускает мою CameraActivity. И это прекрасно работает. Мне пришлось сделать линейный макет и включить 3 изображения, которые выглядят как настоящие вкладки, поэтому я могу попытаться имитировать работу вкладок, поворачивая экран в горизонтальной ориентации и сохраняя изображение в портретной ориентации. Пользователь может щелкнуть одно из изображений (кнопок), чтобы отобразить следующую вкладку. Это моя проблема. Он должен выйти из моей «активности камеры», возвращаясь к «пустой активности» на вкладке, где это должно быть интерпретировано как нажатие на нужную вкладку на моем изображении.

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

Я могу установить onclicklistener, где я могу реагировать на фальшивые вкладки (изображения), нажимаемые для выхода из режима работы камеры. При выходе вкладка должна обновиться, чтобы вы туда вернулись. какие-либо предложения?

Спасибо

1 Ответ

158 голосов
/ 16 января 2009

Я сосредоточусь на ответах, как разрешить вашу рабочую среду так, чтобы она работала так, как вы хотите.

Для захвата действий, выполняемых над одним действием в другом, требуется три шага.

Запустите дополнительную активность (вашу «активность камеры») как субактивность, используя startActivityForResult вместо startActivity.

Intent i = new Intent(this,CameraActivity.class);    
startActivityForResult(i, STATIC_INTEGER_VALUE);

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

resultIntent = new Intent(null);
resultIntent.putExtra(PUBLIC_STATIC_STRING_IDENTIFIER, tabIndexValue);
setResult(Activity.RESULT_OK, resultIntent);
finish();

Последний шаг заключается в вызове Activity, переопределите onActivityResult для прослушивания обратных вызовов с камеры Activity. Получите дополнительную информацию из возвращенного Намерения, чтобы определить индекс вкладки, которую вы должны отображать.

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) {     
  super.onActivityResult(requestCode, resultCode, data); 
  switch(requestCode) { 
    case (STATIC_INTEGER_VALUE) : { 
      if (resultCode == Activity.RESULT_OK) { 
      int tabIndex = data.getIntExtra(PUBLIC_STATIC_STRING_IDENTIFIER);
      // TODO Switch tabs using the index.
      } 
      break; 
    } 
  } 
} 
...