StartActivityForResult () из фрагмента и заканчивая дочерним действием, не вызывает onActivityResult () в фрагменте

FirstActivity.Java имеет FragmentA.Java который вызывает startActivityForResult() . SecondActivity.Java call finish() но onActivityResult никогда не будет вызван, который написан в FragmentA.Java .

Код FragmentA.Java :

  @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // some code Intent i = new Intent(getActivity(), SecondActivity.class); i.putExtra("helloString", helloString); getActivity().startActivityForResult(i, 1); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); getActivity(); if(requestCode == 1 && resultCode == Activity.RESULT_OK) { //some code } } 

Код SecondActivity.Java :

  @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //some code Intent returnIntent = new Intent(); returnIntent.putExtra("result", result); setResult(Activity.RESULT_OK,returnIntent); finish(); } 

Я пробовал отлаживать код, но onAcitvityResult() никогда не onAcitvityResult() .

Solutions Collecting From Web of "StartActivityForResult () из фрагмента и заканчивая дочерним действием, не вызывает onActivityResult () в фрагменте"

Вы должны написать onActivityResult() в свой FirstActivity.Java следующим образом

 @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); } 

Таким образом, это вызовет ваш фрагмент onActivityResult()

Изменить: решение заключается в замене getActivity().startActivityForResult(i, 1); С startActivityForResult(i, 1);

Ответ Кевина работает, но это затрудняет воспроизведение данных с использованием этого решения.

Лучшее решение – не начинать startActivityForResult() на уровне активности.

В вашем случае не вызывайте getActivity().startActivityForResult(i, 1);

Вместо этого просто используйте startActivityForResult() и он будет работать отлично! 🙂

У фрагмента уже есть startActivityForResult, который будет вызывать onActivityResult во фрагменте, если вы его используете, вместо «getActivity () …»

Вы должны написать onActivityResult () в свой FirstActivity.Java следующим образом

 @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { for (Fragment fragment : getChildFragmentManager().getFragments()) { fragment.onActivityResult(requestCode, resultCode, data); } } 

Это вызовет метод onActivityResult фрагментов на FirstActivity.java

Мы могли бы вызвать startActivityForResult() непосредственно из Fragment this.startActivityForResult(i, 1); Вы должны вызвать this.startActivityForResult(i, 1); Вместо getActivity().startActivityForResult(i, 1);

 Intent i = new Intent(getActivity(), SecondActivity.class); i.putExtra("helloString", helloString); this.startActivityForResult(i, 1); 

Действие отправит результат действия на ваш фрагмент.

onActivityresult() в ParentActivity.