Passer un paramètre à un fragment

Résolu/Fermé
Hamster18 Messages postés 178 Date d'inscription mercredi 2 janvier 2019 Statut Membre Dernière intervention 22 janvier 2024 - 10 mars 2020 à 12:59
Hamster18 Messages postés 178 Date d'inscription mercredi 2 janvier 2019 Statut Membre Dernière intervention 22 janvier 2024 - 12 mars 2020 à 13:30
Bonjour,
Je créé actuellement ma première application android, et je suis dans situation suivante : il faudrait que je passe à mon fragment un objet "Carte" (que j'ai crée). J'ai bien vu des tuto et des vidéo, mais je n'ai pas du tout comprit comment faire alors es ce que quelqu'un pourrait m'expliquer ou bien m'aiguiller vers un bon tuto s'il vous plaît ?

Merci d'avance pour vos réponse.
Cordialement.
A voir également:

5 réponses

BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 3 894
11 mars 2020 à 09:14
Bonjour,

Il faut passer par les bundle et les arguments. As-tu vraiment besoin de l'objet en entier ou bien juste quelques champs ?
Tu es en Java ou en Kotlin ?
0
Hamster18 Messages postés 178 Date d'inscription mercredi 2 janvier 2019 Statut Membre Dernière intervention 22 janvier 2024
11 mars 2020 à 09:29
Je suis en java et non j'ai pas besoin de tout les champs
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 3 894
11 mars 2020 à 09:53
Dans ton Fragment, je te conseille de mettre une fonction statique comme ceci :

    // Définition des clés pour retrouver les valeurs dans le bundle
    public static final String EXTRA_PARAM_1 = "extra_param_1";
    public static final String EXTRA_PARAM_2 = "extra_param_2";

    public static MonFragment newInstance(String param1, int param2) {
        Bundle args = new Bundle();
        args.putString(EXTRA_PARAM_1, param1);
        args.putInt(EXTRA_PARAM_2, param2);

        MonFragment fragment = new MonFragment();
        fragment.setArguments(args);
        return fragment;
    }


Pour créer ton fragment, tu fais comme ceci par exemple :
MonFragment fragment = MonFragment.newInstance("coucou", 42);


Ensuite, pour récupérer les valeurs dans ton fragment
String param1 = getActivity().getIntent().getExtras().getString(EXTRA_PARAM_1);

0
Hamster18 Messages postés 178 Date d'inscription mercredi 2 janvier 2019 Statut Membre Dernière intervention 22 janvier 2024
11 mars 2020 à 11:23
Pour récupérer les valeur on met bien le bout de code dans le onCreateView() du fragment ? Car quand je teste dans newInstance() j'ai bien les valeur, mais je peux pas les récupérer ensuite (elles sont nuls )...
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 3 894
11 mars 2020 à 11:25
oui, dans le
onCreateView()
0
Hamster18 Messages postés 178 Date d'inscription mercredi 2 janvier 2019 Statut Membre Dernière intervention 22 janvier 2024 > BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024
Modifié le 11 mars 2020 à 11:39
Bin je ne comprend pas alors pourquoi je reçois une valeur null alors ... Cela pourrais venir d'ou ?
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 3 894 > Hamster18 Messages postés 178 Date d'inscription mercredi 2 janvier 2019 Statut Membre Dernière intervention 22 janvier 2024
11 mars 2020 à 11:48
Fais voir ton code : du fragment et de la création du fragment
0
Hamster18 Messages postés 178 Date d'inscription mercredi 2 janvier 2019 Statut Membre Dernière intervention 22 janvier 2024
11 mars 2020 à 12:49
D'accord :
Voici le code du fragment :

public class FragmentCarte extends Fragment {
    private TextView textViewTexteCarte;
    private ImageView imageCarte;
    private AdapterView.OnItemSelectedListener listener;
    public static final String EXTRA_PARAM_1 = "extra_param_1";
    public static final String EXTRA_PARAM_2 = "extra_param_2";

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment, container, false);
        textViewTexteCarte = (TextView) v.findViewById(R.id.textViewTexteCarte);
        imageCarte = (ImageView) v.findViewById(R.id.imageCarte);
        String param1 = getActivity().getIntent().getExtras().getString(EXTRA_PARAM_1);
        Log.d("tag", "Eelement Fragement" + param1 +" ");
        textViewTexteCarte.setText(param1);
        return v;
    }

    public static FragmentCarte newInstance(String param1, String param2) {
        Bundle args = new Bundle();
        args.putString(EXTRA_PARAM_1, param1);
        args.putString(EXTRA_PARAM_2, param2);

        FragmentCarte fragment = new FragmentCarte();
        fragment.setArguments(args);

        return fragment;
    }
}


et pour la créetion du frangment :
    ListeCarte listeCarte = new ListeCarte();
    protected void onCreate(Bundle savedInstanceState) {

        FragmentCarte fragment = FragmentCarte.newInstance(listeCarte.listeCarte.get(1).getDilemme(), listeCarte.listeCarte.get(1).getImg());

        viewPager = (ViewPager) findViewById(R.id.idpager);
        adapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
        viewPager.setAdapter(adapter);

}
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 3 894
11 mars 2020 à 13:47
Pardon, c'est ma faute... J'ai mélangé 2 choses ^^

Pour récupérer les arguments du fragment, c'est plutôt comme ceci :
String param1 = getArguments().getString(EXTRA_PARAM_1);


Note : tu peux renommer les "param" que j'avais mis en quelque chose de plus parlant pour toi ;)
0
Hamster18 Messages postés 178 Date d'inscription mercredi 2 janvier 2019 Statut Membre Dernière intervention 22 janvier 2024 > BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024
11 mars 2020 à 18:45
Oui j'y compte bien mais pour l'instant j'évite les risque d'erreur. D'ailleurs malgré la correction il y a toujours l'erreur ...
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 3 894 > Hamster18 Messages postés 178 Date d'inscription mercredi 2 janvier 2019 Statut Membre Dernière intervention 22 janvier 2024
11 mars 2020 à 18:54
Es-tu sûr de passer les bons paramètres au fragment ? De ce que j'en vois, ta liste n'est pas remplie quand tu fais appel au fragment... D'ailleurs, tu en fait quoi ?
0
Hamster18 Messages postés 178 Date d'inscription mercredi 2 janvier 2019 Statut Membre Dernière intervention 22 janvier 2024 > BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024
11 mars 2020 à 19:32
Bin pour être sur j'ai passer directement les mêmes paramètres que vous mais j'ai la même erreur
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 3 894 > Hamster18 Messages postés 178 Date d'inscription mercredi 2 janvier 2019 Statut Membre Dernière intervention 22 janvier 2024
Modifié le 12 mars 2020 à 08:58
Quelle erreur as-tu ?
As-tu testé en debug pas-à-pas ?

Quand je vois ça :
ListeCarte listeCarte = new ListeCarte();
    protected void onCreate(Bundle savedInstanceState) {

        FragmentCarte fragment = FragmentCarte.newInstance(listeCarte.listeCarte.get(1).getDilemme(), listeCarte.listeCarte.get(1).getImg());
...

Je me dis que ton objet
listeCarte
est vide...sauf si tu crées toute la structure de la liste dans le constructeur
ListeCarte()
.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Hamster18 Messages postés 178 Date d'inscription mercredi 2 janvier 2019 Statut Membre Dernière intervention 22 janvier 2024
12 mars 2020 à 13:29
D'accord merci
Si d'autre tombe sur le poste et ce demmande comment creer le fragment le code est en dessous sinon aller sur ce lien : https://mathias-seguy.developpez.com/tutoriels/android/comprendre-fragments/#LVI-A
        <LinearLayout
            android:id="@+id/firstpane"
            android:layout_height="fill_parent"
            android:layout_width="wrap_content"
            android:layout_weight="1"
            android:orientation="horizontal">
        </LinearLayout>


        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();

        FragmentCarte fragment = FragmentCarte.newInstance("coucou", 42);

        ft.replace(R.id.frag, fragment); //.replace ou .add

        ft.commit();


0