startActivityForResult () vs getActivity ().startActivityForResult () в фрагменте Android
какие различия между startActivityForResult() vs getActivity().startActivityForResult() в фрагменте Android? И каковы различия в поведении в onActivityForResult() когда вызывается фрагмент?
6 ответов
startActivityForResult() должен обрабатывать его из fragment ' s onActivityForResult()
getActivity().startActivityForResult() должны справиться с этим с activity ' s onActivityForResult()
по сути:
если у вас fragment и вы хотите обработать результат на fragment используйте onActivityForResult(), в противном случае, если вы хотите обработать его из activity фрагмента, используйте getActivity.startActivityForResult()
startActivityForResult из фрагмента вызов startActivityForResult контейнера активности. Так для фрагмента: -
вызовите startActivityForResult (Intent, int) из содержащего фрагмент действия.
тогда, когда вы используете его в фрагмент прямо определенные изменения могут быть сделаны по запросу код.И вы получите измененный код запроса в onActivityresult (), потому что я столкнулся с некоторой проблемой с измененным запросом код недавно . Вы можете посмотреть в Этой Теме.
можно использовать startActivityForResult() дома и getActivity().startActivityForResult() внутри фрагмента.
Inshort, чтобы получить контекст деятельности, мы предшествуем ему с getActiviy().
вместо этого мы можем вызвать onActivityResult() конкретного фрагмента, как показано ниже из Actiivty.:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
for (Fragment fragment : getChildFragmentManager().getFragments()) {
fragment.onActivityResult(requestCode, resultCode, data);
}
}
если мы поставим его более подробно, то,
если вы позвоните startActivityForResult() из вашего фрагмента код запроса будет изменен действием, которому принадлежит фрагмент.
Итак, если вы хотите получить правильный resultCode в вашей деятельности вы можете попробовать, как показано ниже :
НЕ ИСПОЛЬЗУЙТЕ: (в таком случае):
startActivityForResult(intent, 1);
использование :
getActivity().startActivityForResult(intent, 1);
надеюсь, что это помогает..!
никакой разницы... Но небольшая разница-getActivity ().startActivityForResult () может вызывать только из фрагмента:)
" startActivityForResult () " работает с классами активности. когда вы находитесь в классе Activity, вы можете напрямую использовать этот метод. когда вы находитесь во фрагменте, поскольку фрагмент создает активность, вы должны сначала получить активность, основанную на этом фрагменте. значит:
//in fragment class:
Activity activity = this.getActivity();
теперь у вас есть активность, и я сказал, что вы можете использовать "startActivityForResult()" для активности, которую вы получаете из фрагмента.
activity.startActivityForResult();
надеюсь поможет.
вы должны сделать звонок со ссылкой на Activity С startActivityForResult(Intent intent, int requestCode) метод указан в Activity.
Итак, если вы звоните из YourActivity, он уже имеет ссылку Activity как:
YourActivity extends AppCompatActivity (which is subclass of `Activity`)
но если вы звоните из YourFragment необходимо указать Activity ссылка, которая в этом случае будет деятельностью, содержащей YourFragment; поэтому мы используем getActivity() и затем триггер startActivityForResult()