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

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

Спасибо,

82
0
70 389
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Чтобы зафиксировать действия, выполняемые в одном 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; 
    } 
  } 
} 

Почему вы включаете requestCode, а затем проверяете, действительно ли requestCode == RESULT_OK? Обновлено: Nevermind, я вижу разницу requestCode / resultCode.

varikin 31.12.2010 20:32

могу я сделать это с AsynkTask как вторая деятельность?

Francisco Corrales Morales 09.05.2014 18:35

Другие вопросы по теме