Есть ли метод, который работает как исходный фрагмент для результата?

У меня есть фрагмент в оверлее. Это для входа в службу. В приложении для телефона каждый из шагов, которые я хочу показать в наложении, – это их собственные экраны и действия. Есть три части процесса входа в систему, и каждый из них имеет свою собственную деятельность, которая была вызвана с помощью startActivityForResult ().

Теперь я хочу сделать то же самое, используя фрагменты и наложение. Наложение будет отображать фрагмент, соответствующий каждой активности. Проблема в том, что эти фрагменты размещены в действии в API Honeycomb. Я могу получить первый фрагмент, но мне нужно запуститьActivityForResult (), что невозможно. Есть ли что-то вроде startFragmentForResult (), где я могу запустить новый фрагмент, и когда это будет сделано, вернуть результат в предыдущий фрагмент?

Solutions Collecting From Web of "Есть ли метод, который работает как исходный фрагмент для результата?"

Все фрагменты живут внутри Деяний. Запуск фрагмента для результата не имеет особого смысла, потому что у Activity, в котором он находится, всегда есть доступ к нему, и наоборот. Если Фрагмент должен передать результат, он может получить доступ к своей Деятельности и установить ее результат и завершить его. В случае замены фрагментов в одном действии, активность Activity все еще доступна для обоих фрагментов, и вся ваша передача сообщений может просто проходить через Activity.

Просто помните, что у вас всегда есть связь между Фрагментом и его деятельностью. Запуск и завершение результата – это механизм для общения между действиями. Затем Деятельности могут передавать любую необходимую информацию своим фрагментам.

Если вы хотите, есть некоторые способы общения между фрагментами,

 setTargetFragment(Fragment fragment, int requestCode) getTargetFragment() getTargetRequestCode() 

Вы можете использовать функцию обратного вызова.

 Fragment invoker = getTargetFragment(); if(invoker != null) { invoker.callPublicMethod(); } 

Мои 2 цента.

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

Затем я использую метод onHiddenChanged чтобы узнать, что старый фрагмент переключился на новый. См. Код ниже.

Перед тем как покинуть новый фрагмент, я установил результат в глобальном параметре, который будет запрашиваться старым фрагментом. Это очень наивное решение.

 @Override public void onHiddenChanged(boolean hidden) { super.onHiddenChanged(hidden); if (hidden) return; Result result = Result.getAndReset(); if (result == Result.Refresh) { refresh(); } } public enum Result { Refresh; private static Result RESULT; public static void set(Result result) { if (RESULT == Refresh) { // Refresh already requested - no point in setting anything else; return; } RESULT = result; } public static Result getAndReset() { Result result = RESULT; RESULT = null; return result; } } 

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