Это один из самых популярных номеров.Мы можем найти много веток по этой проблеме.Но ни один из них не полезен для меня.
Итак, я решил эту проблему, используя это решение.
Давайте сначала разберемся, почему это происходит.
Мы можемВызов startActivityForResult
напрямую из Фрагмента, но на самом деле механика позади все обрабатывается Деятельностью.
Как только вы позвоните startActivityForResult
из Фрагмента, requestCode будет изменен наприкрепить идентификатор фрагмента к коду.Это позволит Activity быть в состоянии отследить того, кто отправил этот запрос после получения результата.
После того, как Activity будет перемещена обратно, результат будет отправлен в onActivityResult Activity с измененным requestCode, который будет декодирован в исходный requestCode+ Фрагмент личности.После этого Activity отправит результат Activity этому фрагменту через onActivityResult.И все это сделано.
Проблема в следующем:
Активность может отправить результат только фрагменту, который был прикреплен непосредственно к Активности, но не вложенному.Вот почему onActivityResult вложенного фрагмента никогда не будет вызываться, несмотря ни на что.
Решение:
1) Запустите Intent в своем фрагменте с помощью следующего кода:
/** Pass your fragment reference **/
frag.startActivityForResult(intent, REQUEST_CODE); // REQUEST_CODE = 12345
2) Теперь в переопределении родительской активности **onActivityResult()
: **
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
Вы должны вызвать это в родительскомдеятельность, чтобы заставить это работать.
3) В вашем фрагменте вызов:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
}
}
Вот и все.С помощью этого решения его можно применять для любого отдельного фрагмента, независимо от того, является он вложенным или нет.И да, это также охватывает все дела!Кроме того, коды также хороши и чисты.