Как я могу вызвать OnActivityResult внутри фрагмента и как он работает?

Я хочу знать, возможно ли в onActivityResult() использовать внутри Fragment, и если да, то как это работает, пожалуйста, объясните с помощью примера.

Ответ 1

Вы бы назвали:

startActivityForResult(i, 1);

а затем:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
   //super.onActivityResult(requestCode, resultCode, data); comment this unless you want to pass your result to the activity.
}

Ответ 2

Используйте этот код в активности.

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);
    Fragment fragment = (Fragment) getSupportFragmentManager().findFragmentByTag(childTag);
    if (fragment != null) {
        fragment.onActivityResult(requestCode, resultCode, intent);
    }
}

Ответ 3

Определенно это сработает, оно будет работать так же, как в действиях. Вы звоните startActivityForResult(intent, requestCode); и обычно получают результат в

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

Ответ 4

Да, вы можете использовать OnActivityResult внутри Fragment. Вот так

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
//super.onActivityResult(requestCode, resultCode, intent);
// perform your action here
}

EDIT

Для получения дополнительной информации проверьте этот старый вопрос

fooobar.com/questions/54702/...

Ответ 5

если вы вызываете startActivityForResult() в фрагменте, результат доставляется в родительскую активность.

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);//will deliver result to desired fragment.
}

Как работает

если вы видите requestCode в действии, это будет как 655545, теперь

super.onActivityResult() будет вычислять желаемый фрагмент и код запроса.

если ваш фрагмент в списке нужного фрагмента ViewPager найден с помощью

requestCode>>16

и requestCode находится requestCode&0xffff.