Jump to content

[RÉSOLU]lancer une activity a partir d'une listView


Morgan26

Recommended Posts

Bonsoir,

J'essaye en ce moment de lancer une activity apres que l'on ai cliquer dans ma listView.

Cependant je croise un probleme de taille : je ne peux pas faire de startActivity dans une class qui extends BaseAdapter ...

Pour illustrer cela, voici ma classe qui cree ma listView :

package com.Sportandlive;

import java.util.List;

import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class ActuAdapter extends BaseAdapter{

   List listeActu;
   LayoutInflater inflater;

   @Override
   public int getCount() {
       return listeActu.size();

   }

   @Override
   public Object getItem(int position) {
       return listeActu.get(position);
   }

   @Override
   public long getItemId(int position) {
       return position;

   }

   private class ViewHolder {
       TextView actuTitre;
       TextView actuAuteur;
       TextView actuDate;
       ImageView actuImage;
   }





   @Override
       public View getView(int position, View convertView, ViewGroup parent) {

       ViewHolder holder;
       if(convertView == null) {

           holder = new ViewHolder();
           convertView = inflater.inflate(R.layout.itemactu, null);
           holder.actuTitre = (TextView)convertView.findViewById(R.id.actuTitre);
           holder.actuAuteur = (TextView)convertView.findViewById(R.id.actuAuteur);
           holder.actuDate = (TextView)convertView.findViewById(R.id.actuDate);
           holder.actuImage = (ImageView)convertView.findViewById(R.id.actuImage);

           DownloadImageTask dit = new DownloadImageTask(holder.actuImage);
           dit.execute(listeActu.get(position).getUrlPhoto());
           convertView.setTag(holder);
       } else {
           holder = (ViewHolder) convertView.getTag();
       }

       holder.actuTitre.setText(listeActu.get(position).getTitre());
       holder.actuAuteur.setText(listeActu.get(position).getAuteur());
       holder.actuDate.setText(listeActu.get(position).getDate());

// C'est ici que je cree mon onClick et que je voudrais lancer mon activity

       convertView.setOnClickListener(new OnClickListener() {
           public void onClick(View view) {
               Intent monIntent = new Intent(null, Autre.class);
               startActivity(monIntent);
           }
       });
       return convertView;
       }


   public ActuAdapter(Context context,List listeActu) {
   inflater = LayoutInflater.from(context);
   this.listeActu = listeActu;
   }

}


Si quelqu'un pouvait me dire comment palier a ce probleme ce serrait genial !

Et qui plus et, je doit passer dans mon onclick une valeur, celle de listeActu.get(position).getDate() par exemple : cela a fin d'envoyer ce parametre a ma future activity. Donc Si quelqu'un a la aussi quelques infos a me donne ce serrait super !

Merci d'avance pour votre aide !

Link to comment
Share on other sites

Sinon, startActivity() est une méthode de Context, et chaque View embarque une référence au contexte avec elle, accessible via getContext().

Donc dans ton listener tu peux aussi faire un simple view.getContext().startActivity(monIntent).

Je ne rejoins pas forcément les avis au-dessus, le contrôleur peut aussi bien avoir sa place au niveau de l'adapter, qui dans ce cas représente bien le "kit" présentation + contrôleur, à qui on passe le modèle (pour reprendre une terminologie MVC). Selon les cas, ça n'est pas forcément déconnant ;) (par exemple si un même type de liste, avec les mêmes actions, et donc le même Adapter, est utilisé dans différentes activités, c'est un peu bête de copier du code).

Après tout, le rôle de l'Adapter n'est pas clairement défini à ce niveau là, et de toute façon Android n'a pas un framework MVC, donc ces principes ne sont pas toujours applicables.

Link to comment
Share on other sites

Ok ok merci a tous ! Je n'ai pas beaucoup de temps pour tester ce que vous me proposez aujourd'hui mais je vous tiendrais au courant de l’évolution de la situation.

Encore merci de votre aide !

EDIT :

Finalement j'ai reussi en supprimant mon onclick de mon adapter et en le mettant dans mon activity appelant l'adapteur de cette facon :

        listActu = (ListView)findViewById(R.id.listeActu);
       ActuAdapter adapterActu = new ActuAdapter(this, mesActu);

       listActu .setOnItemClickListener(new OnItemClickListener() {
           @Override
           public void onItemClick(AdapterView<?> parent, View view, int position,
               long id) {
               // Ton traitement souhaité lors du click,
                       // la variable position est en fait l'indice de l'item cliqué 
                       //à partir de là tu peux récupérer l'objet souhaité de ton tableau
               Toast.makeText(Actu.this, "position : ".concat(Integer.toString(position)), Toast.LENGTH_SHORT).show();

           }
       });

       listActu.setAdapter(adapterActu);

Vous trouverez plus d'info http://www.developpez.net/forums/d919922/java/general-java/java-mobiles/android/decouverte-utilisation-composant-listview/

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...