J’ai un fragment (F1) avec une méthode publique comme ceci
et oui quand je l’appelle (à partir de l’activité) c’est null...
Il doit être quelque chose que je fais très mal, mais je ne sais pas ce qui est qui
J’ai un fragment (F1) avec une méthode publique comme ceci
et oui quand je l’appelle (à partir de l’activité) c’est null...
Il doit être quelque chose que je fais très mal, mais je ne sais pas ce qui est qui
'commit' horaires de la transaction, c'est à dire que ça n'arrive pas, d'emblée, mais il est prévu que les travaux sur le thread principal la prochaine fois que le thread principal est prêt.
Je suggère l'ajout d'un
onAttach(Activity activity)
méthode de fragment et de mettre un point d'arrêt sur elle et de voir quand il est appelé par rapport à votre appel à " tsa()'. Vous verrez qu'elle est appelée après la méthode où vous faites l'appel à la " tsa()' sorties. Le "onAttach' appel est où le fragment est attachée à son activité et à partir de ce point getActivity() va retourner une valeur non-nulle (nb il y a aussi un onDetach() l'appel).
PJL est droit. J'ai utilisé sa suggestion, et c'est ce que j'ai fait:
défini des variables globales pour fragment:
private final Object attachingActivityLock = new Object();
private boolean syncVariable = false;
mise en œuvre
@Override public void onAttach(Activity activity) { super.onAttach(activity); synchronized (attachingActivityLock) { syncVariable = true; attachingActivityLock.notifyAll(); } }
3 . J'ai enveloppé ma fonction, où j'ai besoin d'appeler getActivity(), dans le thread, parce que si il aurait exécuté sur le thread principal, je voudrais bloquer le thread à l'étape 4. et onAttach() ne sera jamais appelé.
Thread processImage = new Thread(new Runnable() {
@Override
public void run() {
processImage();
}
});
processImage.start();
4 . dans ma fonction de là où j'ai besoin d'appeler getActivity(), j'utilise ce (avant l'appel getActivity())
synchronized (attachingActivityLock) {
while(!syncVariable){
try {
attachingActivityLock.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Si vous avez quelques mises à jour de l'INTERFACE utilisateur, n'oubliez pas de les exécuter sur le thread de l'INTERFACE utilisateur. J'ai besoin de mettre à jour ImgeView j'ai donc fait:
image.post(new Runnable() {
@Override
public void run() {
image.setImageBitmap(imageToShow);
}
});
L'ordre dans lequel les fonctions sont appelées après commit():
J'avais besoin de faire un peu de travail qui a impliqué certains points de Vue, de sorte onAttach() ne fonctionne pas pour moi; il s'est écrasé. Donc je l'ai déplacé une partie de mon code qui a été à la définition de certains paramètres à l'intérieur d'une méthode appelée juste après commit() (1.), puis l'autre partie du code qui s'occupait de vue à l'intérieur de onCreateView() (3.).
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.