Partage
  • Partager sur Facebook
  • Partager sur Twitter

TP Android - Partie 2 Activité

putExtras()

Sujet résolu
    8 septembre 2017 à 15:28:27

    Bonjour à tous, 

    J'essaye de réaliser le TP de la partie 2 activité. J'ai réussi à gérer la première partie, c'est à dire afficher les titres des articles. 

    Cependant je n'arrive pas à le terminer en affichant le contenu de mes articles au clic des titres.

    Je ne trouve pas dans le cours comment il faudrait procéder (pourtant c'est sensé y être je suppose ?).

    Voilà mon code pour le moment :

    Ma classe principale ListNewsActivity qui gère l'affiche de mes titres:

    public class ListNewsActivity extends AppCompatActivity implements View.OnClickListener {
        private Intent intent;
        List<FakeNews> list = FakeNewsList.all;
    
          @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_recyclerview);
    
            /**** Gestion de la recyclerView ****/
            //On cherche le layout qui contient la recyclerView
            RecyclerView recyclerView = (RecyclerView) findViewById(R.id.listRV);
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
            //On lit notre vue à l'adapter (lien entre vue et données)
            recyclerView.setAdapter(new NewsAdapter(this, list));
        }
    
        @Override
        public void onClick(View view) {
            Toast toast = new Toast(ListNewsActivity.this);
            toast.makeText(ListNewsActivity.this, "je suis dans la reading activity", Toast.LENGTH_SHORT).show();
            intent = new Intent(this, ReadingActivity.class);
            startActivity(intent);
        }
    
    }

    Mon adapter :

    public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.MyViewHolder> {
    
        List<FakeNews> list = FakeNewsList.all;
        Context context;
    
        /*
        Constructeur de la classe NewsAdapter
        @param le contexte et la liste des fakenews
         */
        public NewsAdapter(Context context, List<FakeNews> list){
            this.context = context;
            this.list = list;
        }
    
        /*
        Création d'une nouvelle classe MyViewHolder
         */
        public class MyViewHolder extends RecyclerView.ViewHolder {
            TextView titleArticle;
            WebView htmlContent;
            ImageView newspapersIcon;
    
            /*
            Constructeur de la classe MyViewHolder: représente les composants à modifier entre chaque cellule
            @param une vue appelée itemView
             */
            public MyViewHolder(View itemView) {
                super(itemView);
                titleArticle = (TextView)itemView.findViewById(R.id.articleTitle);
                newspapersIcon = (ImageView) itemView.findViewById(R.id.newspaperIcon);
            }
        }
        /*
        Méthode appelée lors de la création d'un nouveau ViewHolder
        @param : la viewGroup dans laquelle la nouvelle view va être ajoutée / le type de view de la nouvelle view
        @return : une nouvelle ViewHolder qui comprend les éléments donnés
         */
        @Override
        public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_cel_rv, parent, false);
            MyViewHolder myViewHolder = new MyViewHolder(v);
            return myViewHolder;
        }
        /*
        Méthode appelée par la recyclerView qui permet d'afficher les données à une position spécifique
        @param : la viewHolder qui doit être MAJ / la position de l'item en question
         */
        @Override
        public void onBindViewHolder(MyViewHolder holder, int position) {
            holder.titleArticle.setText(list.get(position).title);
            //holder.htmlContent.loadData(list.get(position).htmlContent, null, null);
        }
    
        @Override
        public int getItemCount() {
            return list.size();
        }
    
    }

    Ma classe ReadingActivity qui doit donc gérer l'affichage de mes articles :

    public class ReadingActivity extends AppCompatActivity {
        WebView webView;
        String htmlContent;
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            setContentView(R.layout.activity_article);
            // c'est ici que je fais le lien entre le contenu de mon article et la webview qui l'affiche
            webView = (WebView) findViewById(R.id.contentArticle);
            webView.setWebViewClient(new WebViewClient());
            webView.loadData(htmlContent, "text/html; charset=UTF-8", null);
        }
    
    }

    Je supposais qu'on était sensé être capable de réaliser l'exercice suite au cours donné, pourtant je ne vois pas ce que je suis sensée faire et je desespère un peu...

    Comment puis-je donc faire en sorte que lorsqu'on clique sur mes titres on ait bien ensuite le contenu de l'article qui s'affiche ? Comment procéder avec un intent + extra s'il vous plait ?

    Merci d'avance de vos éclaircissements,





    -
    Edité par Julie260787 8 septembre 2017 à 15:32:29

    • Partager sur Facebook
    • Partager sur Twitter

    Julie VIGNAUX

      8 septembre 2017 à 21:53:06

      Salut,

      Au niveau de ta méthode onBindViewHolder, tu peux placer un OnClickListener sur l'itemView porté par le holder. Tu as ensuite la position ce qui te permet de retrouver l'article sur lequel tu as cliqué pour le donner en extra de ta ReadingActivity.

      • Partager sur Facebook
      • Partager sur Twitter
        9 septembre 2017 à 10:20:36

        Bonjour,

        Merci pour ton retour et ton explication concise et efficace.

        Application terminée, je l'envoie.

        Bonne journée,

        • Partager sur Facebook
        • Partager sur Twitter

        Julie VIGNAUX

          1 octobre 2018 à 12:45:07

          rolandl a écrit:

          Salut,

          Au niveau de ta méthode onBindViewHolder, tu peux placer un OnClickListener sur l'itemView porté par le holder. Tu as ensuite la position ce qui te permet de retrouver l'article sur lequel tu as cliqué pour le donner en extra de ta ReadingActivity.

          Bonjour !

          Je rencontre le meme probleme!

          Vous pouvez etre clair sur le OnClickListener?

          Merci d'avance!

          • Partager sur Facebook
          • Partager sur Twitter
          dfghjkjlmù
            18 février 2019 à 16:59:15

            On peut mettre le SetOnclickListener dans le contructeur de la classe MyViewHolder
            class MyAdapter extends Adapter<MyAdapter.MyViewHolder> {
                List<FakeNews> listFakeNews;
            
                Context mContext;
            
                public MyAdapter(){ }
            
                public MyAdapter(Context mContext, List<FakeNews> listFakeNews ) {
                    this.listFakeNews = listFakeNews;
                    this.mContext = mContext;
                }
            
                @Override
                public int getItemCount() {return listFakeNews.size();}
            
                @Override
                public MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
                    LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
                    View view = inflater.inflate(R.layout.cellule, viewGroup, false);
                    return new MyViewHolder(view);
                }
            
                @Override
                public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
                    FakeNews fakeNews = listFakeNews.get(position);
                    //holder.title.
                    holder.display(fakeNews, position);
                }
            
                class MyViewHolder extends RecyclerView.ViewHolder {
                    private final TextView title;
                    private int position;
                    private FakeNews currentPair;
                    private MyViewHolder(final View itemView) {
                        super(itemView);
            
                        title = ((TextView) itemView.findViewById(R.id.title));
            
                        itemView.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View View) {
                                int num = title.getId();
                                Intent intent = new Intent(mContext, VisualizeAtivity.class);
                                intent.putExtra("pos", position);
                                mContext.startActivity(intent);
                            }
                        });
                    }
            
                    public void display(FakeNews fn, int pos) {
                        currentPair = fn;
                        title.setText(currentPair.title);
                        position = pos;
                    }
                }
            }
            • Partager sur Facebook
            • Partager sur Twitter

            TP Android - Partie 2 Activité

            × 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