Je viens de passer un ancien projet Android d'Eclipse à Android Studio et dans ce processus j'ai mis à jour de l'ancienne version des bibliothèques de support 19.0.1
à 22.2.0
. Après cela, je reçois quelques erreurs dans mon code de travail. J'ai téléchargé tous les SDK entre et vérifié où l'erreur est entré en jeu, et il semble être dans la version 21.1.0
et ci-dessus. J'ai regardé dans le release notes pour cette version, mais je n'ai rien trouvé d'intéressant. Mon erreur est que j'obtiens un NullPointerException
ici. Notez que cette méthode fait partie de Activity
, pas le parent Fragment
.Android: NullPointerException en utilisant findFragmentById() après l'amélioration des bibliothèques de support
public synchronized void onRecipesFiltered(ArrayList<Recipe> filteredRecipes)
{
FilteredRecipesListFragment filteredRecipesListFragment = (FilteredRecipesListFragment)
getSupportFragmentManager().findFragmentById(R.id.mm_filtered_recipes_list_fragment);
// filteredRecipesListFragment becomes null
filteredRecipesListFragment.onRecipesFiltered(filteredRecipes);
}
Le Fragment
Je reçois ici est un ListFragment
qui fait partie d'un fichier XML qui est gonflé au démarrage de l'application. Il semble que ce ListFragment
est ajouté à un à l'intérieur le parent Fragment
pendant le gonflage. C'est probablement pourquoi je reçois un nullpointer tout en obtenant le FragmentManager
du Activity
. Ainsi, ma question est:
Comment puis-je obtenir le ListFragment
dans le Activity
? Est-il nécessaire de garder une référence au parent Fragment
pour obtenir le ListFragment
à travers son FragmentManager
? Le parent Fragment
est gonflé en renvoyant new MyFragment()
en FragmentPagerAdapter#getItem()
, nulle part ailleurs, d'où il est un peu plus difficile d'obtenir la référence correcte dans le Activity
.
Il y a encore une chose à noter: J'ai vu quelques messages me disant que je devrais mettre à jour à JDK 1.7
, ce que j'ai fait (OpenJDK 1.7
). Je ne me souviens pas de ce que j'ai fait, mais sous "Bibliothèques externes", je vois <1.7> (/usr/lib/jvm/java-1.7.0-openjdk-amd64)
. Je ne sais pas si cela compte.
Cela signifie que je dois garder une référence au parent 'Fragment' quelque part être capable d'appeler 'getChildFragmentManager()'. La méthode dans la question est placée dans l'activité pour agir comme une passerelle entre l'activité et ses fragments.I * pourrait * garder une référence au 'Fragment' parent, mais cela fait partie d'un' FragmentPagerAdapter', donc il n'est pas si facile de contenir une référence parce que 'FragmentPagerAdapter # getItem()' renvoie 'new FilteredRecipesFragment()'. Quelle est la meilleure façon de procéder? –
Je suis à court d'idées ... laissez-moi y penser –