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()