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, де я можу реагувати на підроблені вкладки (зображення), на які клацається, щоб вийти з активності камери. При виході вкладка повинна оновитись так, куди ви повернетесь. будь-які пропозиції?

Дякую,

Відповіді:


159

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

Щоб зафіксувати дії, що виконуються над однією діяльністю в межах іншої, потрібно три кроки.

Запустіть вторинну Діяльність (Вашу "Діяльність камери") як субактивність, використовуючи startActivityForResultзамість startActivity.

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

У межах субактивності (Activity Camera), а не просто закривати Activity, коли користувач натискає інше зображення вкладки, вам потрібно створити новий намір та включити індекс вкладки, який відображатиметься, коли ви повернетесь до батьківської програми за допомогою пакета додаткових . Щоб повернути його батьківському дзвінку setResultперед викликом, finishщоб закрити камеру Діяльність.

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

Завершальний крок - це активність виклику, яку потрібно замінити, onActivityResultщоб прослухати зворотні дзвінки з камери. Отримайте додаткове з поверненого наміру, щоб визначити індекс вкладки, яку ви повинні відображати.

@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? Редагувати: Неважливо, я бачу різницю requestCode / resultCode.
varikin

1
я можу зробити це з AsynkTaskяк другий діяльністю ?
Франсіско Корралес Моралес
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.