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, где я могу реагировать на поддельные вкладки (изображения), которые нужно щелкнуть, чтобы выйти из действия камеры. При выходе вкладка должна обновляться так, чтобы она возвращалась. любые предложения?
Спасибо,
Ответы
Ответ 1
Я сосредоточусь на ответе на то, как разрешить ваш рабочий стол так, чтобы он вел себя так, как вы хотите.
Для захвата действий, выполняемых для одного действия в другом, требуется три шага.
Запустите вторичную активность (свою "активность камеры" ) как субактивность, используя startActivityForResult
вместо startActivity
.
Intent i = new Intent(this,CameraActivity.class);
startActivityForResult(i, STATIC_INTEGER_VALUE);
В рамках субактивности (активность камеры) вместо того, чтобы просто закрывать действие, когда пользователь нажимает на другое изображение вкладки, вам нужно создать новый Intent и включить индекс вкладки, отображаемой при возврате в родительское приложение, используя пакет дополнений. Чтобы передать его родительскому вызову 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;
}
}
}
Ответ 2
private boolean firstTime = true;
@Override
protected void onResume() {
super.onResume();
Toast.makeText(this, "First time here? "+ firstTime , Toast.LENGTH_LONG).show();
firstTime = false;
}