Forums Android

Listener sur un ArrayList .. Impossible de cliquer

Listener sur un ArrayList .. Impossible de cliquer

Message non lupar DenverChouw » 28 Avr 2011, 17:55

Bonjour à toutes & à tous,

Actuellement en stage, je dois réaliser une application Android, jusque la pas de problème mise à part que j'étais dans une formation PHP et la c'est du JAVA :roll:

Bref !

Mon application avance doucement mais surment.

Le principe de mon application :

- Récupérer des informations sur MYSQL depuis un serveur PHP.
- Ensuite depuis du JAVA récupérer grâce au format JSON les informations désirées.
- Puis réaliser plusieurs fonctions que je ne vais pas détailler pour le moment.

Pour ça il n'y à pas de souci, j'ai affiché tout ça dans un ArrayList, et voila ce que j’obtiens :

Image


Et a partir de cette affichage, j'aimerais que lorsque je clique sur un élément, ça m'affiche une nouvelle page ( Celle ci, je n'ai pas finie la mise en page mais c'est un aperçu ) en recupérant les informations de cette dernière comme l'image, le titre etc :

Image


Le souci ?

J'essaye juste de detecter un Click sur mes elements, mais il ne se passe rien, et je n'ai pas de message d'erreur dans le LogCat :(

Comme je suis pas encore trés formé, je comprend pas ce qui ne vas pas .. j'ai cherché sur le forum et appliqué leurs conseils mais rien ne fonctionne =/

Aprés le blabla .. voici mon code : ( Bonne chance x) )

Mon adaptateur : MonAdapter.java
Code: Select All Code
package android.sitesavisiter;

import java.util.ArrayList;

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

public class MonAdapter extends BaseAdapter {

    private Context mContext;
    //Le contexte dans lequel est présent notre adapter
    // notre adaptateur creer seul les objet necessaire
    private LayoutInflater mInflater;
    ////Un mécanisme pour gérer l'affichage graphique depuis un layout XML
    //charger notre fichier XML pour l’item
    private ArrayList<Lieu> results;
    // tableau de nos données
    private ViewHolder holder;
    //ViewHolder = sert à mémoriser les éléments de la liste en mémoire
    //pour qu’à chaque rafraichissement l’écran ne scintille pas
   

   
 // le constructeur
    public MonAdapter(Context c, ArrayList<Lieu> results)
    {
        mContext = c;
        mInflater = LayoutInflater.from(mContext);
      //Le LayoutInflater permet de parser un layout XML et de te transcoder en IHM Android.
        this.results = results;
       
    }

    private static class ViewHolder  // declaration des elements quon affichera
    {
        ImageView imgSmall;
        TextView subCategoryPrincipale;
        TextView subcats;
        TextView descrMea;
        TextView nom;
    }

    @Override
    public int getCount() //qui retournera le nombre d’éléments dans notre liste.
    {
       //Pour respecter l'interface BaseAdapter, il nous faut spécifier la méthode "count()".
        return results.size();
    }

    @Override
    public Object getItem(int position)
    {
       //qui retournera notre la position indiquée de notre objet
        return results.get(position);
    }

    @Override
    public long getItemId(int position) //qui retournera l’id de l'objet
    {
        return position;
    }

 // Maintenant il faut surcharger la méthode pour renvoyer une "View"
 // en fonction d'une position donnée.
    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
       //(1) : Réutilisation des layouts
        if (convertView == null)
        {
            convertView = mInflater.inflate(R.layout.lieux, null);
          //Initialisation de notre item à partir du layout XML "lieux.xml"
            holder = new ViewHolder();
          //(2) : Récupération des TextView de notre layout
            holder.imgSmall = (ImageView) convertView.findViewById(R.id.list_item_image);
            holder.subCategoryPrincipale = (TextView) convertView.findViewById(R.id.list_item_name);
            holder.nom = (TextView) convertView.findViewById(R.id.list_item_lieu);
            holder.subcats = (TextView) convertView.findViewById(R.id.list_item_namebis);
            holder.descrMea = (TextView) convertView.findViewById(R.id.list_item_description);

            convertView.setTag(holder);
        }
        else
        {
            holder = (ViewHolder) convertView.getTag();
        }
      //(3) : Renseignement des valeurs
        Lieu c = (Lieu) getItem(position);
        holder.imgSmall.setImageBitmap(c.getImage());
        holder.subCategoryPrincipale.setText(c.getName());
        holder.nom.setText(c.getLieux());
        holder.subcats.setText(c.getNamebis());
        holder.descrMea.setText(c.getDescription());
       
      //On retourne l'item créé.
        return convertView;
    }
}



Ma class Lieu.java pour mon adaptateur :

Code: Select All Code
package android.sitesavisiter;

import android.graphics.Bitmap;

public class Lieu {
    String nom, descrMea, subCategoryPrincipale, subcats;
    Bitmap imgSmall;


   public Lieu(String lieu, String desc, Bitmap img, String nom, String nombis) {
      // TODO Auto-generated constructor stub
      setLieux(lieu);
      setDescription(desc);
      setImage(img);
        setName(nom);
        setNamebis(nombis);     
   }

   //la categorie
    public String getName()
    {
        return subCategoryPrincipale;
    }
    public void setName(String nom)
    {
        this.subCategoryPrincipale = nom;
    }
  //l image
    public Bitmap getImage()
    {
        return imgSmall;
    }
    public void setImage(Bitmap img)
    {
        this.imgSmall = img;
    }
  //le nom de la sous cat
    public void setNamebis(String nombis)
    {
        this.subcats = nombis;
    }
    public String getNamebis()
    {
        return subcats;
    }
  //le lieu
   public String getLieux()
   {
        return nom;
    }
    public void setLieux(String lieu)
    {
        this.nom = lieu;
    }
    //la description
   public String getDescription()
   {
        return descrMea;
    }
    public void setDescription(String desc)
    {
        this.descrMea = desc;
    }

}


Mon fichier java principale PlacesActivity.java :

Code: Select All Code
package android.sitesavisiter;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.reflect.Array;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.R.id;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;

import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class PlacesActivity extends ListActivity implements AdapterView.OnItemClickListener
{
    // Tableau où seront stocké les données récupérées
    private ArrayList<Lieu> results;
    InputStream is;
   JSONObject json_data;
   private Bitmap myBitmap;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main2);
        getData();
        this.setListAdapter(new MonAdapter(this, results));
        getListView().setOnItemClickListener(this);
 
        //String[] names = new String[] { "Linux", "Windows7", "Eclipse", "Suse"};
        //this.setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, names));
    }
   
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id)
    {
       Log.i("*****************","LE TAG");
        Toast.makeText(this, "SELECTION: ", Toast.LENGTH_LONG).show();
    }

    /*
   @Override
   public void onItemClick(AdapterView<?> a, View v, int position, long id) {
      // TODO Auto-generated method stub
      Log.i("*****************","LE TAG");
      // Obtien l'item clique
      //Object o = this.getListAdapter();
      //String keyword = o.toString();
      Toast.makeText(this, "SELECTION: ", Toast.LENGTH_LONG).show();
   }*/
       
   private void getData()
   {
      results = new ArrayList<Lieu>();

      String result = "";
      ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
      try
          {
             HttpClient httpclient = new DefaultHttpClient();
             HttpPost httppost = new HttpPost("http://10.0.2.2/VivreParis/htdocs_dev/demo/android/json/new_lieux.php");
             httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
             HttpResponse response = httpclient.execute(httppost);
             HttpEntity entity = response.getEntity();
             is = entity.getContent();
          }
      catch(Exception e)
          {
             Log.e("log_tag", "Erreur de connexion au http "+e.toString());
          }         
      try
          {
          BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
          StringBuilder sb = new StringBuilder();
          String line = null;
          while ((line = reader.readLine()) != null)
              {
                 sb.append(line + "\n");
              }
              is.close();
              result=sb.toString();
          }
      catch(Exception e)
              {
                 Log.e("log_tag", "Erreur lors de la conversion"+e.toString());
              }
      try
          {
         JSONObject json = new JSONObject(result);
         JSONArray ja = json.getJSONArray("lieux");
         JSONArray ja2 = json.getJSONArray("subcats");
         JSONArray ja3 = json.getJSONArray("categs");

         for (int i = 0; i < ja.length(); i++)
         {

            JSONObject j = ja.getJSONObject(i);
            String lieu = j.getString("nom");
            String desc = j.getString("descrMea");
            String image = j.getString("imgSmall");
            String nom3 = j.getString("subCategoryPrincipale");
            String nombis = j.getString("subcats");
            BmpFromURL myBmpFromURL = new BmpFromURL(image);
            Bitmap img = myBmpFromURL.getMyBitmap();
            
            for (int o = 0; o < ja2.length(); o++)
            {

               JSONObject j2 = ja2.getJSONObject(o);
               String idsous = j2.getString("id");
               String nomsous = j2.getString("nom");
               String catsous = j2.getString("cat");
               
               if (nom3.equals(idsous))
                  {
                  nom3 = nomsous;
                  nombis = catsous;
                  }
               
               for (int p = 0; p < ja3.length(); p++)
               {
                  JSONObject j3 = ja3.getJSONObject(p);
                  String idcat = j3.getString("id");
                  String nomcat = j3.getString("nom");
                  
                  if (nombis.equals(idcat))
                  {
                  //System.out.println("ANCIENNES VALEURS :"+ cat);
                  nombis = nomcat;
                  //System.out.println("NEW VALEURS :"+ cat);
                  }
               }
            }
         results.add(new Lieu ( lieu, desc, img, nom3, nombis));
         }
         
         
             }
      catch(JSONException e)
             {
               Log.i("RESULTATS :", "ERREUR: " +e);
                Log.e("log_tag", "Erreur lors du chargement des données "+e.toString());
            }
      
      
    }
   public class BmpFromURL
   {

      //The following code will be placed inside here

   

public BmpFromURL(String imageURL)
      {
         URL myImageURL = null;
         try {
            myImageURL = new URL(imageURL);
            }
         catch (MalformedURLException error)
            {
            error.printStackTrace();
            }
         try {
            HttpURLConnection connection = (HttpURLConnection)myImageURL .openConnection();
            connection.setDoInput(true);
            connection.connect();
            InputStream input = connection.getInputStream();
            myBitmap = BitmapFactory.decodeStream(input);
            }
         catch (IOException e)
            {
               e.printStackTrace();
            }

      }
      public Bitmap getMyBitmap()
      {
         return myBitmap;
      }
   
   }

}


Mon main2.xml dans lequel j'appelle ma listview :

Code: Select All Code
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:focusable="false"
   android:focusableInTouchMode="false"
    >
   <Button   
   android:id="@+id/boutonFiltre"   
   android:layout_width="wrap_content"   
   android:layout_height="40dp"
   android:text="Filtrer"
   android:layout_marginLeft="255dp"
   android:layout_marginTop="5dp"
   >   
   </Button>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/FrameLayout01"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:background="#ffffff"
   >
   <ListView
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:id="@android:id/list"
      android:clickable="true"
      >
   </ListView>
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@android:id/empty"
      android:text="Rien a afficher"
      >
   </TextView>
</FrameLayout>
</LinearLayout>


Et pour finir mon lieux.xml dans lequel je lui indique les imageview, textview etc :
Code: Select All Code
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
        android:focusable="false"
   android:focusableInTouchMode="false"
    >
    <ScrollView
       android:id="@+id/ScrollView01"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"     
    >
<LinearLayout
   android:orientation="horizontal"
   android:layout_width="fill_parent"
   android:layout_height="42px"
   android:gravity="center_vertical"
   >
   <ImageView
      android:id="@+id/list_item_image"
      android:adjustViewBounds="true"
       android:layout_gravity="center_vertical"
      android:layout_height="74px"
      android:layout_width="wrap_content"
      android:clickable="true"
      >
   </ImageView>
   <LinearLayout
      android:id="@+id/LinearLayout01"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:orientation="vertical"
      >
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
      <TextView
         android:layout_width="wrap_content"
         android:textSize="13px"
           android:textStyle="bold"
         android:gravity="center_vertical"
         android:layout_marginLeft="2px"
         android:id="@+id/list_item_namebis"
         android:layout_height="wrap_content"
         >
      </TextView>
      <TextView
         android:layout_height="wrap_content"
         android:id="@+id/list_item_name"
         android:gravity="center_vertical"
         android:layout_width="wrap_content"
         android:layout_marginLeft="2px"
         android:paddingLeft="5dp"
         >
      </TextView>
</LinearLayout>
            <TextView
         android:layout_height="wrap_content"
         android:id="@+id/list_item_lieu"
         android:gravity="center_vertical"
         android:layout_width="fill_parent"
         android:layout_marginLeft="2px"
         android:lines="1"
         android:textSize="16px"
           android:textColor="#000000"
           android:textStyle="bold"
         >
      </TextView>
      <TextView
         android:layout_height="wrap_content"
         android:id="@+id/list_item_description"
         android:gravity="center_vertical"
         android:layout_width="fill_parent"
         android:layout_marginLeft="2px"
         android:lines="1"
         android:textSize="10px"
           android:textColor="#666666"
           android:textStyle="italic"
         >
      </TextView>
   </LinearLayout>
</LinearLayout>
</ScrollView>
</LinearLayout>


Voila je suis désolé pour la longueur mais sans code c'est dure de trouver ce qui ne fonctionne pas :S

Je vous remercie d'avance si vous pouvez m'aider =/

Cordialement,

Quentin.
Dernière édition par bobyetcrycry le 28 Avr 2011, 18:10, édité 1 fois.
Raison: Gras inutile supprimées.
DenverChouw Gamer Débutant
Messages: 2
Inscription: 28 Avr 2011, 17:21
Pays: France
Sexe: Homme

Re: Listener sur un ArrayList .. Impossible de cliquer

Message non lupar marshallino16 » 29 Avr 2011, 11:22

Bonjour,

Sur quels éléments ils ne se passent rien ?
Que voudrais-tu que cela fasse ?
marshallino16 Gamer Argent
Gamer Argent
Messages: 3777
Inscription: 12 Déc 2009, 18:21
Localisation: Toulouse
Pays: France
Sexe: Homme

Re: Listener sur un ArrayList .. Impossible de cliquer

Message non lupar DenverChouw » 29 Avr 2011, 12:01

Bonjour,

Tout d’abord merci d'avoir répond :)

Je souhaiterais que lorsque je clic sur un éléments affichés qui contient donc l'image, le titre, la catégorie etc, j'aimerais que ça m'ouvre une nouvelle page qui contiendra ces mêmes informations avec plus de détails, mais pour le moment je n'arrive même pas a cliquer sur ma liste =S

J'ai essayé de mettre clickable=true etc mais rien, il ne veut pas entrer dans ma fonction onItemClic, je comprend pas pourquoi =(

J’espère que ces informations on peut un peut t'aider pour cibler mon problème =/

Cordialement,

Quentin.

[EDIT] by ##¤DroidXAce¤## : Attention, pour la bonne lisibilité du forum, il est inutile d'abuser des caractères en gras / italique / couleurs et taille.
Merci de votre compréhension.



Edit : D'accord, je suis désolé pour la gène occasionnée :S
DenverChouw Gamer Débutant
Messages: 2
Inscription: 28 Avr 2011, 17:21
Pays: France
Sexe: Homme


 

Retourner vers Entraide et assistance au développement