Android:Фиксирование возврата действия
-
19-08-2019 - |
Вопрос
У меня есть вопрос относительно запуска новых видов деятельности.Все сводится вот к чему.У меня есть 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, в котором я могу реагировать на щелчки по поддельным вкладкам (изображениям), чтобы выйти из режима работы камеры.При выходе вкладка должна обновиться, чтобы именно туда вы вернулись.есть какие-нибудь предложения?
Спасибо,
Решение
Я сосредоточусь на ответе на то, как разрешить ваш обходной путь, чтобы он вел себя так, как вы хотите.
Для фиксации действий, выполняемых в рамках одного действия в рамках другого, требуется три шага.
Запустите дополнительное действие (ваше "Действие с камерой") в качестве подактивности, используя startActivityForResult
вместо того , чтобы startActivity
.
Intent i = new Intent(this,CameraActivity.class);
startActivityForResult(i, STATIC_INTEGER_VALUE);
В рамках подактивности (действие с камеры) вместо того, чтобы просто закрывать действие, когда пользователь нажимает на другое изображение вкладки, вам нужно создать новое намерение и включить индекс вкладки, который будет отображаться при возвращении в родительское приложение с помощью пакета extras.Чтобы передать его обратно родительскому вызову 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;
}
}
}