2015-08-26 4 views
0

У меня есть пейджер представления как основное действие с несколькими фрагментами.Как узнать, возобновлено ли действие, потому что другое действие поверх стека вызвало финиш()

Один из фрагментов внутри этого пейджера представления инициирует другое действие, которое делает что-то, а затем заканчивается (подумайте об этом, выбрав фотографию, а затем сохраните ее в базе данных).

Как только второе действие завершено, я вызываю finish(), и это возвращает меня к моему предыдущему фрагменту внутри моего пейджера.

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

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

Возможно ли это? Есть ли способ узнать, какая активность finish() заставила текущую активность активироваться?

Большое спасибо,

ответ

1

вам нужно будет использовать startActivityForResult(), и вы получите результаты onActivityResult в родительской активности. что-то вроде этого.

// Fragment in First Activity 
Intent i = new Intent(this, SecondActivity.class); 
getActivity().startActivityForResult(i, 1); 

//SecondActivity if sending back results 
Intent returnIntent = new Intent(); 
returnIntent.putExtra("result",result); 
setResult(RESULT_OK,returnIntent); 
finish(); 

//SecondActivity if not sending results. 

Intent returnIntent = new Intent(); 
setResult(RESULT_CANCELED, returnIntent); 
finish(); 

обработки результатов

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

if (requestCode == 1) { 
    if(resultCode == RESULT_OK){ 
     String result=data.getStringExtra("result"); 
    } 
    if (resultCode == RESULT_CANCELED) { 
     //Write your code if there's no result 
    } 
} 
} 

ссылки How to manage `startActivityForResult` on Android?

2

Взгляните на startActivityForResult. Дополнительные документы в разделе «Начало работы и получение результатов» раздела Activity page.

Иногда вы хотите вернуть результат деятельности после ее окончания. Например, вы можете начать действие, которое позволяет пользователю выбрать человека в списке контактов; Когда он заканчивается, он возвращает человека, который был выбран. Для этого вы вызываете версию startActivityForResult (Intent, int) со вторым целочисленным параметром, идентифицирующим вызов. Результат вернется через ваш метод onActivityResult (int, int, Intent).

1

Когда вы впервые переходите ко второму действию, назовите его так.

Intent intent = new Intent(this, YourSecondActivity.class); 
startActivityForResult(intent, requestCode); 

Код запроса - это целое число, которое позволит вам определить, какая деятельность возвращается с результатами позже.

Всякий раз, когда вы сделали в вашей второй деятельности, отправить обратно дополнительные данные, которые нужно перед вызовом finish(), как этот

Intent intent = new Intent(); 
intent.putExtra("yourData", yourVariable); 
setResult(RESULT_OK, intent); 
finish(); 

Назад в первой деятельности, переопределить метод onActivityResult(), и делать все, что вам нужно с данными, которые были возвращены.

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if (requestCode == 1) { 
     if(resultCode == RESULT_OK){ 
      String result=data.getStringExtra("yourData"); 
     } 
    } 
} 

Теперь вы должны быть способны определить, какие действия возвращаются, и отправить обратно любые другие данные, которые могут вам понадобиться!

Смежные вопросы