Ma structure de l'application est la suivanteFacebook Connexion de Nested Fragment ne fonctionne pas - indice de fragment de résultat de l'activité hors de portée
MainActivity (A ViewPager qui contient 2 fragments - Fragment 1 et le fragment 2)
|
|--Fragment 1
| (ViewPager with several fragments which is an
| app tutorial/intro)
|
|--Fragment 2
(Single Fragment where I have my custom facebook login button)
Au début, mon onActivityResult pour le fragment imbriqué n'était pas appelé. Mais j'ai trouvé une solution à ce en utilisant le code suivant
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d(TAG, "onActivityResult");
List<Fragment> frags = getSupportFragmentManager().getFragments();
if (frags != null) {
for (Fragment f : frags) {
if (f != null)
handleResult(f, requestCode, resultCode, data);
}
}
}
private void handleResult(Fragment frag, int requestCode, int resultCode, Intent data) {
if (frag instanceof LoginFragment) { // custom interface with no signitures
frag.onActivityResult(requestCode, resultCode, data);
}
List<Fragment> frags = frag.getChildFragmentManager().getFragments();
if (frags != null) {
for (Fragment f : frags) {
if (f != null)
handleResult(f, requestCode, resultCode, data);
}
}
}
Maintenant, mon onActivityResult dans mon LoginFragment ne s'appelle, mais je ne connecte pas. Ceci est mon onActivityResult pour le LoginFragment
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(TAG, "LoginFragment onActivityResult");
callbackManager.onActivityResult(requestCode, resultCode, data);
}
J'ai aussi enregistré un rappel à l'aide
LoginManager.getInstance().registerCallback but my OnSuccess callback is not hit.
Au lieu de cela je reçois un journal indiquant ce qui suit
W/FragmentActivity﹕ Activity result fragment index out of range: 0x2face
D/MainActivity﹕ onActivityResult
D/LoginFragment﹕ LoginFragment onActivityResult
Comment puis-je vous connecter se passe avec succès et les callbacks fonctionnent?
EDIT: Lors du débogage de ce problème, j'ai conservé un point d'arrêt dans le rappel onActivityResult de la classe FragmentActivity.
if (mFragments.mActive == null || index < 0 || index >= mFragments.mActive.size()) {
Log.w(TAG, "Activity result fragment index out of range: 0x"
+ Integer.toHexString(requestCode));
return;
}
mFragments.mActive == null est faux.
index < 0 est faux
index> = mFragments.mActive.size() est vrai
Cela ne fonctionne pas. Comme je l'ai mentionné, le onActivityResult dans mon fragment imbriqué est appelé. Ce n'est pas le problème. Le problème est que mes rappels de loginManager ne sont pas appelés. – Rohan
@Rohan: Pouvez-vous le déboguer ?? – AndiGeeky
Veuillez vérifier la modification. – Rohan