Android: фиксирование результатов активности

82

У меня вопрос по запуску новых мероприятий. Все сводится к следующему. У меня есть 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, где я могу реагировать на нажатие фальшивых вкладок (изображений) для выхода из активности камеры. При выходе вкладка должна обновиться, и вы вернетесь туда. какие-либо предложения?

Благодаря,

Chrispix
источник

Ответы:

159

Я сосредоточусь на том, чтобы ответить, как разрешить ваш рабочий процесс, чтобы он вел себя так, как вы хотите.

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

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

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

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

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; 
    } 
  } 
} 
Рето Мейер
источник
3
Почему вы включаете requestCode, а затем проверяете, действительно ли requestCode == RESULT_OK? Изменить: Nevermind, я вижу разницу requestCode / resultCode.
варикин
1
я могу сделать это с AsynkTaskкак второй деятельностью ?
Франсиско Корралес Моралес,