Partage
  • Partager sur Facebook
  • Partager sur Twitter

Variable récupéré vide dans une seconde classe

    26 mars 2019 à 12:41:47

    Bonjour, 

    Voici mon problème 

    J'ai une activité (ClassementActivité) qui doit afficher une recyclerview et une classe (MyAdapter) à coté pour gérer l'adapter de la recyclerview. 
    Dans ClassementActivité j'ai un tableau de String que je souhaite utiliser dans MyAdapter pour cela j'utilise un getter mais mon souci est que le tableau récupéré dans MyAdapter est le tableau déclaré vide et non celui rempli dans le onCreate de ClassementActivité... 

    Dans MyAdapter : 

    ClassementActivité monTest = new ClassementActivité(); 
    private String monNouveauTableau[] = monTest.getMonTableau(); 

    J'ai surement oublié de faire quelque chose des idées? 
    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      26 mars 2019 à 16:24:43

      Salut,

      Quand tu fais un "new" tu fais une nouvelle instance. Normal donc que tu récupères quelque chose de vide via ton get j'imagine.

      • Partager sur Facebook
      • Partager sur Twitter
        26 mars 2019 à 16:37:56

        rolandl a écrit:

        Salut,

        Quand tu fais un "new" tu fais une nouvelle instance. Normal donc que tu récupères quelque chose de vide via ton get j'imagine.


        Salut rolandl,

        Merci pour ta réponse

        Plus exactement elle est vide quand je la déclare dans ma première activité comme ceci

        private String monTablo[] = new String[4];

        Mais elle n'est pas vide quand je la déclare comme ça dans ma première activité 

        private String monTablo[] = {"a","b","c","d","e"};

        Cette nouvelle instance dont tu parles, récupère le contenu lors de la création de la variable moi je souhaite la récupérer après sa modification dans le onCreate

        • Partager sur Facebook
        • Partager sur Twitter
          26 mars 2019 à 17:12:40

          tu dois la passer à ton adapter directement via son constructeur par exemple.
          • Partager sur Facebook
          • Partager sur Twitter
            26 mars 2019 à 19:34:05

            Merci et je viens tout juste d'essayer et ça ne fonctionne pas...

            J'ai compris que le souci est que le code qui vient après la récupération dans le constructeur ou mon ancienne méthode avec les getter, est surement exécute avant que ma variable soit traitée.

            Tu as une idée pour contourner ça  ??

            • Partager sur Facebook
            • Partager sur Twitter
              27 mars 2019 à 9:54:01

              black9ken a écrit:

              Merci et je viens tout juste d'essayer et ça ne fonctionne pas...


              Montre nous ton code ;)
              • Partager sur Facebook
              • Partager sur Twitter
                27 mars 2019 à 20:35:53

                ClassementActivity

                public class ClassementActivity extends AppCompatActivity {
                
                    private TextView mTitreClassement;
                    private RecyclerView rv ;
                
                    private String mMonClassement[] = {"a","b","c","d","e"};
                
                
                    @Override
                    protected void onCreate(Bundle savedInstanceState) {
                        super.onCreate(savedInstanceState);
                        setContentView(R.layout.activity_classement);
                
                        //Recupere un classement trier depuis MainActivity
                       Intent classementActivityIntent = getIntent();
                       mMonClassement = classementActivityIntent.getStringArrayExtra("JOUEUR_TRIE");
                
                        mTitreClassement = findViewById(R.id.classementview);
                        rv =  findViewById(R.id.list);
                
                
                        //Pour verifier que le tableau est vraiment recupere avec le Intent getStringArrayExtra
                        mTitreClassement.setText(mMonClassement[0]);
                
                
                
                        rv.setLayoutManager(new LinearLayoutManager(this));
                        rv.setAdapter(new MyAdapter(mMonClassement));
                
                
                    }
                }

                MyAdapter

                public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {


                private String mMonClassementTrie[] = {"1","2","3","4","5"};

                public MyAdapter(String mTab[]){
                this.mMonClassementTrie = mTab;
                }


                private final List<Pair<String, String>> characters = Arrays.asList(
                Pair.create(mMonClassementTrie[0], "Brave, curious, and crafty, she has been prophesied by the witches to help the balance of life"),
                Pair.create(mMonClassementTrie[1], "Lyra's daemon, nicknamed Pan."),
                Pair.create(mMonClassementTrie[2], "Lyra's friends"),
                Pair.create(mMonClassementTrie[3], "Lyra's uncle"),
                Pair.create(mMonClassementTrie[4], "Intelligent and beautiful, but extremely ruthless and callous.")

                );

                @Override
                public int getItemCount() {
                return characters.size();
                }

                @Override
                public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                LayoutInflater inflater = LayoutInflater.from(parent.getContext());
                View view = inflater.inflate(R.layout.list_cell, parent, false);
                return new MyViewHolder(view);
                }

                @Override
                public void onBindViewHolder(MyViewHolder holder, int position) {
                Pair<String, String> pair = characters.get(position);
                holder.display(pair);
                }

                public class MyViewHolder extends RecyclerView.ViewHolder {

                private final TextView name;
                private final TextView description;


                private Pair<String, String> currentPair;


                public MyViewHolder(final View itemView) {
                super(itemView);


                name = ((TextView) itemView.findViewById(R.id.name));
                description = ((TextView) itemView.findViewById(R.id.description));

                itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                new AlertDialog.Builder(itemView.getContext())
                .setTitle(currentPair.first)
                .setMessage(currentPair.second)
                .show();
                }
                });
                }

                public void display(Pair<String, String> pair) {
                currentPair = pair;
                name.setText(pair.first);
                description.setText(pair.second);
                }
                }

                }

                Une fois que je Run l'appli c'est ma liste contient les élements du tableau 12345

                • Partager sur Facebook
                • Partager sur Twitter
                  27 mars 2019 à 20:42:20

                  Salut,

                  Initialise ta variable character dans le constructeur de ton adapter

                  • Partager sur Facebook
                  • Partager sur Twitter
                    27 mars 2019 à 22:09:41

                    rolandl a écrit:

                    Salut,

                    Initialise ta variable character dans le constructeur de ton adapter


                    Excuse moi je suis débutant mais normalement initialiser une variable c'est bien lui donner une valeur? En écrivant  

                    this.mMonClassementTrie = mTab;

                    C'est pas initialiser la variable mMonClassementTrie?

                    Si c'est pas le cas pourrais tu me montrer stp

                    • Partager sur Facebook
                    • Partager sur Twitter
                      27 mars 2019 à 22:42:55

                      Je parle de l’initialisation de la variable characters. C'est bien elle qui pose soucis non quand tu dis "ma liste contient les éléments 12345 du tableau" ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        27 mars 2019 à 23:54:04

                        De quelle manière l’initialiser ?

                        Pourrais tu me montrer le code pour que ça fonctionne ?

                        -
                        Edité par black9ken 28 mars 2019 à 0:12:18

                        • Partager sur Facebook
                        • Partager sur Twitter
                          28 mars 2019 à 9:27:42

                          Au lieu de l'initialiser lors de sa déclaration, tu dois l'initialiser dans le constructeur de ton adapteur :

                          public MyAdapter(String mTab[]){
                            this.mMonClassementTrie = mTab;
                            characters = ...
                          }
                          



                          • Partager sur Facebook
                          • Partager sur Twitter

                          Variable récupéré vide dans une seconde classe

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown