Je crée actuellement une application à l'aide d'une connexion Bluetooth. La connexion est gérée à l'intérieur d'un objet simple (HandleConnection). Lorsque la connexion est établie, mon application passe en mode "distant", ce qui signifie que je remplace mon fragment principal par un autre (RemoteFragment) qui utilise l'objet "HandleConnection".Fragment en cours de réinitialisation après modification de la configuration
Jusqu'à ce que le tout va bien, car à la fin de mon « onCreate » (dans mon activité) Je mets l'attribut handleConnection du RemoteFragment:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
if (savedInstanceState == null) {
retainedFragment = new RetainedFragment();
getFragmentManager().beginTransaction().add(retainedFragment, RetainedFragment.class.toString()).commit();
handleConnection = new HandleConnection(this, handler);
retainedFragment.setHandleConnection(handleConnection);
} else {
remoteFragment = (RemoteFragment) getFragmentManager().findFragmentByTag(RemoteFragment.class.toString());
retainedFragment = (RetainedFragment) getFragmentManager().findFragmentByTag(RetainedFragment.class.toString());
if (remoteFragment == null)
remoteFragment = new RemoteFragment();
handleConnection = retainedFragment.getHandleConnection();
remoteFragment.setHandleConnection(handleConnection);
}
fragmentTransaction.commit();
}
Tout fonctionne bien sauf quand je passe en mode paysage. Ensuite (après avoir joué en mode debug), il semble que mon RemoteFragment soit recréé après l'appel de mon setter, ce qui signifie évidemment que mon attribut handleConnection est null. Pourquoi fait-il cela? Je comprendrais si je ne réutilisais pas le fragment précédent (alors j'aurais deux fragments différents l'un sur l'autre) mais dans ce cas ça n'a aucun sens. J'ai fait une solution de contournement en appelant une fonction de rappel dans onCreateView pour obtenir l'objet HandleConnection, mais pourquoi l'attribut serait null lorsque j'ai appelé un setter juste avant?
Merci!
Oui, mais puisque j'appelle '' '' remoteFragment.setHandleConnection (handleConnection); '' '' le remoteFragment ne devrait pas avoir un pointeur nul lors de l'entrée onCreateView? – pLesur
Dans votre condition lorsque vous appelez 'handleConnection = keptFragment.getHandleConnection();' est-ce que ce handle est null? Je suppose que c'est nul. Vous devriez avoir un contrôle de nullité ici avant de le mettre à 'remoteFragment'. – Sabeeh
Non, le handleConnection n'est pas nul. J'ai utilisé le modèle RetainedFragment mentionné dans le doc android ici: [link] (http://developer.android.com/guide/topics/resources/runtime-changes.html) – pLesur