IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Nouvelle activité sur OnItemClickListener Gridview


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 18
    Par défaut Nouvelle activité sur OnItemClickListener Gridview
    Bonjour à tous, j'ai créé une listview qui fonctionne plutôt pas mal mais impossible d'adapter mon code pour une Gridview

    Voici l'activite principale:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    public class sg_menu extends ListActivity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.sg_menu);
     
            Context ctx = getApplicationContext();
    		Resources res = ctx.getResources();
     
    		String[] options = res.getStringArray(R.array.noms);
    		TypedArray icons = res.obtainTypedArray(R.array.icones);
     
    		setListAdapter(new ImageAndTextAdapter(ctx, R.layout.list_icons,
    				options, icons));
        }
     
        @Override
        protected void onListItemClick(ListView l, View v, int position, long id) {
            Intent intent = null;
            switch (position) {
            case 0:
                intent = new Intent(this, sg_1.class);
                break;
            case 1:
                intent = new Intent(this, sg_2.class);
                break;
            case 2:
                intent = new Intent(this, sg_3.class);
                break;
            }
            if (intent != null) {
                startActivity(intent);
            } else {
                // report unknown item selection
            }
        }
    }
    L'adapter:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    public class ImageAndTextAdapter extends ArrayAdapter<String> {
    	private LayoutInflater mInflater;	
    	private String[] mStrings;
    	private TypedArray mIcons;	
    	private int mViewResourceId;
     
    	public ImageAndTextAdapter(Context ctx, int viewResourceId,
    			String[] strings, TypedArray icons) {
    		super(ctx, viewResourceId, strings);
     
    		mInflater = (LayoutInflater)ctx.getSystemService(
    				Context.LAYOUT_INFLATER_SERVICE);
     
    		mStrings = strings;
    		mIcons = icons;
     
    		mViewResourceId = viewResourceId;
    	}
     
    	@Override
    	public View getView(int position, View convertView, ViewGroup parent) {
    		convertView = mInflater.inflate(mViewResourceId, null);
     
    		ImageView iv = (ImageView)convertView.findViewById(R.id.icon);
    		iv.setImageDrawable(mIcons.getDrawable(position));
     
    		TextView tv = (TextView)convertView.findViewById(R.id.text);
    		tv.setText(mStrings[position]);
     
    		return convertView;
    	}	
    }
    Mes layout possèdent une image et un texte, dont les données sont stockées dans un array de "values/string.xml"

    Donc ça fonctionne très bien pour une listview, mais rien à faire pour une GridView! J'ai essayé avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
       public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.grid_layout);
     
            GridView gridView = (GridView) findViewById(R.id.grid_view);
     
            // Instance of ImageAdapter Class
            gridView.setAdapter(new ImageAdapter(this));
     
            /**
             * On Click event for Single Gridview Item
             * */
            gridView.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View v,
                        int position, long id) {
     
                    // Sending image id to FullScreenActivity
                    Intent i = new Intent(getApplicationContext(), FullImageActivity.class);
                    // passing array index
                    i.putExtra("id", position);
                    startActivity(i);
                }
            });
    mais impossible d'adapter le code pour garder le fonctionnement du click suivant l'item cliqué.

    Je bloque vraiment, vous avez une idée s'il vous plait? Merci d'avance

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Qu'est ce qui ne marche pas ?

    Sinon, Eclipse n'a rien dit pour les layout des items ? parceque Image+Text = TextView seul (il est possible de coller une image a droite, gauche, bas, haut à un TextView => c'est comme ça que sont fait les checkbox).

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 18
    Par défaut
    Bonjour

    Qu'est ce qui ne marche pas ?

    Ma listview fonctionne très bien, mais je n'arrive pas à mettre en place les liens vers des activités lors de click sur des items dans la gridview.

    Les 2 premiers codes que j'ai posté ci-dessus sont ceux de la listview, j'aimerai que vous m'indiquiez comment l'adapter pour avoir le même fonctionnement avec ma grille, tout simplement.

    Sinon, Eclipse n'a rien dit pour les layout des items ? parceque Image+Text = TextView seul (il est possible de coller une image a droite, gauche, bas, haut à un TextView => c'est comme ça que sont fait les checkbox).
    En fait, ma listview et ma gridview "appellent" un layout constitué d'un text et d'une image, pas de problème d'affichage sur mon device, j'ai bien mes listes et mes grille, sauf que le liens ne fonctionnent pas sur la grille.

    Merci pour vos conseils!

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par dusty35 Voir le message
    Ma listview fonctionne très bien, mais je n'arrive pas à mettre en place les liens vers des activités lors de click sur des items dans la gridview.
    Non mais j'ai bien compris.... mais c'est quoi qui ne marche pas ?
    Le OnItemClickListener n'est pas appelé ?
    L'intent n'est pas lancé ?
    L'activité n'est pas affichée ?
    L'application ferme ?

    Sinon, j'ai vu aussi l'utilisation de getApplicationContext() ... pourquoi ? un simple MyActivity.this suffirait je pense (remplacer MyActivity bien sur)

    Les 2 premiers codes que j'ai posté ci-dessus sont ceux de la listview, j'aimerai que vous m'indiquiez comment l'adapter pour avoir le même fonctionnement avec ma grille, tout simplement.
    C'est ça justement le hic... normalement c'est tout pareil !

    En fait, ma listview et ma gridview "appellent" un layout constitué d'un text et d'une image, pas de problème d'affichage sur mon device, j'ai bien mes listes et mes grille, sauf que le liens ne fonctionnent pas sur la grille.
    Oui oui, mais normalement, quand on colle dans un layout une ImageView et un TextView collé à lui, Lint (par l'intermédiaire d'eclipse) râle en disant que ce n'est pas utile.... A juste titre.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 18
    Par défaut
    Non mais j'ai bien compris.... mais c'est quoi qui ne marche pas ?
    Le OnItemClickListener n'est pas appelé ?
    L'intent n'est pas lancé ?
    L'activité n'est pas affichée ?
    L'application ferme ?
    L'application ferme au moment du click sur l'item

    Sinon, j'ai vu aussi l'utilisation de getApplicationContext() ... pourquoi ? un simple MyActivity.this suffirait je pense (remplacer MyActivity bien sur)
    En réalité, ce bout de code ne correspond pas, je l'ai trouvé sur un site mais d'une manière générale, je débute et j'ai du mal à tout comprendre.

    C'est ça justement le hic... normalement c'est tout pareil !
    Quand tu dis tout pareil, c'est tout pareil? Je vais revoir ce soir pour préciser quelles sont les erreurs et je reposterai plus en détail.


    Oui oui, mais normalement, quand on colle dans un layout une ImageView et un TextView collé à lui, Lint (par l'intermédiaire d'eclipse) râle en disant que ce n'est pas utile.... A juste titre.
    Ah ok, c'est bon à savoir,je me pencherait là dessus.

    En tout cas, merci de intéresser à mon problème

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par dusty35 Voir le message
    L'application ferme au moment du click sur l'item
    Donc il y a une exception...
    Si il y a exception, il y a un logcat
    Si il y a un logcat, il nous faut la copie (enfin... toute l'exception et ses causes quoi).

    Quand tu dis tout pareil, c'est tout pareil? Je vais revoir ce soir pour préciser quelles sont les erreurs et je reposterai plus en détail.
    Ha ben oui, c'est tout pareil....
    Tu changes GridView par ListView et ca continue de marcher...
    Pour être encore plus "générique"... le code pourrait simplement utiliser un truc genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    AdapterView av = (AdapterView) findViewById(...);
    av.setAdapter(adapter);
    av.setOnItemClickListener(...);
    Et le XML définit si c'est un GridView, ListView, ou Spinner.... bref, pour le code c'est tout pareil.
    C'est d'ailleurs la méthode recommandée en POO... vu qu'on n'utilise que les fonctionalités d'un AdapterView, c'est un objet AdapterView qui est référencé (peut importe son implémentation)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 11
    Dernier message: 21/11/2014, 18h50
  2. [VB.NET] Problème de tri sur Datagrid/gridview multilingue
    Par crimsonPhantom dans le forum ASP.NET
    Réponses: 4
    Dernier message: 16/03/2006, 22h41
  3. [Debutant] Nouvelle question sur les pointeurs
    Par etiennegaloup dans le forum Débuter
    Réponses: 3
    Dernier message: 11/01/2006, 09h55
  4. [formulaire] nouvel enregistrement sur molette
    Par xanthos1348 dans le forum IHM
    Réponses: 5
    Dernier message: 04/01/2006, 00h56
  5. [Static] nouvelle question sur les blocs static
    Par Alec6 dans le forum Langage
    Réponses: 2
    Dernier message: 25/11/2004, 18h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo