2017-06-19 66 views
5

Chciałbym wiedzieć, czy jest możliwe, aby onActivityResult() używać wewnątrz Fragmentu, a jeśli tak, to jak to działa, proszę wyjaśnić na przykładzie.Jak wywołać funkcję OnActivityResult wewnątrz Fragmentu i jak to działa?

+0

jeśli zaczynasz aktywność od fragmentu, możesz użyć funkcji OnActivityResult w działaniu –

+1

Tak, możesz. W fragmencie nadpisuj metdod onActivityResult i skomentuj super.onActivityResult i wykonaj to, co chcesz zrobić w tej metodzie. Jeśli nie rozumiesz, to daj mi znać. –

+0

@RameshKumar czy możesz wyjaśnić mi na przykładzie. Picie dla mnie jest również zrozumiałe. –

Odpowiedz

6

nazwałbyś:

startActivityForResult(i, 1); 

a następnie:

@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. 
} 
1

Tak można użyć OnActivityResult wewnątrz Fragment.like to

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

teraz nazywasz onActivityResult jak ten

getActivity().startActivityForResult(). 
+2

To jest złe. Nie musi wywoływać metody getActivity(). StartActivityForResult(), zamiast tego powinien po prostu wywoływać "startActivityForResult()", a następnie wywoływać w jego fragmencie "onActivityForResult()", nie byłoby problemu, ponieważ fragment może wywoływać te metody. – HaroldSer

1

użyć tego kodu w działalności.

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); 
    } 
} 
2

Zdecydowanie to zadziała, będzie działać tak samo jak w działaniach. Trzeba zadzwonić startActivityForResult(intent, requestCode); i normalnie prowadzić

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

jeśli zadzwonisz startActivityForResult() w fragmencie, wynik jest dostarczana do rodzica czynność.

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

Jak to działa

jeśli widzisz requestCode aktywności będzie jak 655545, teraz

super.onActivityResult() obliczy żądany fragment oraz kod żądania.

jeśli fragment w ViewPager wskaźnik żądanego fragmentu znalezionego

requestCode>>16 

i requestCode znajduje przez requestCode&0xffff.