J'ai mis en œuvre le didacticiel Android à partir du Android Training Site et tout fonctionne jusqu'à présent.Entrez EditText sur un fragment et remplissez également tous les autres fragments
À l'intérieur d'un Fragment
, j'ai ajouté un champ EditText
, où l'utilisateur peut entrer une chaîne de texte simple. Ce que je veux réaliser est: Si l'utilisateur a entré quelque chose, et puis balaye à gauche ou à droite, l'entrée devrait également être «copiée» le nouveau fragment.
Comme dans la formation, j'ai une classe ScreenSlidePageFragment.java et une classe ScreenSlideActivity.java.
J'ai mis en place une interface dans le ScreenSlidePageFragment, as mentioned here:
Communicator mCallback;
public interface Communicator {
void sendData(String inpString);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
try {
mCallback = (Communicator) context;
} catch (ClassCastException e) {
throw new ClassCastException(context.toString() + "must Implement OnEditChangedListener");
}
}
Mais à la fin, j'ai réussi à le recevoir sur le ScreenSlideActivity. Comment mettre à jour un fragment spécifié? Dans ScreenSlideActivity, j'ai essayé de le renvoyer au nouveau fragment.
@Override
public void sendData(String inpString) {
WHATFRAGMENT.changeData(inpString);
}
Mais comment puis-je accéder une autre (de WHATFRAGMENT), qui sont créés dans le ScreenSlidePagerAdapter:
@Override
public Fragment getItem(int position) {
return NewReservationSlidePageFragment.create(position);
}
Ai-je besoin de créer un tout fragment et écraser la nouvelle position? Ou est-il même nécessaire de travailler autour de l'activité? Est-il possible d'utiliser FragmentTransaction
en quelque sorte?
Quelle serait la solution la plus simple pour cela?
La méthode 'getData()' n'est pas nécessaire. Chaque 'Fragment' appellera' sendData() 'quand il est retiré du' FragmentManager', probablement dans 'onPause()'. Probablement le 'Activity' implémente l'interface et transmet les données au' Fragment' suivant. –
Si vous utilisez view pager ** onPause ** et ** OnResume ** ne recevront pas d'appel à ce moment, nous devrions utiliser la méthode ** setUserVisibleHint ** uniquement. –
@MuthukrishnanRajendran Merci beaucoup, maintenant ça marche. Je ne connaissais pas 'setUserVisibleHint()' avant. Mais à un moment donné, j'ai eu un comportement, qui pourrait confondre l'utilisateur: Si le champ de texte est modifié sur l'un des autres fragments, et recopié, les données ne sont pas écrasées. Il reste le "vieux" String, même si j'essaye de l'effacer avant: 'myEditTxt.getText(). Clear()' – a2hur