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

Composants graphiques Android Discussion :

Filtrer un texte avec image dans une listView perso avec un ArrayAdapter


Sujet :

Composants graphiques Android

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 61
    Points : 24
    Points
    24
    Par défaut Filtrer un texte avec image dans une listView perso avec un ArrayAdapter
    Bonjour à tous,

    J'ai un problème de filtre dans ma listView, quelqu'un pourrait-t-il m'aider ?

    Quand j'utilise une ArrayList<ArrayList<String>>, le texte est filtré, mais l'image qui apparais n'est pas la bonne (l'ordre des images reste le même).

    Quand j'utilise une ArrayList<HashMap<String,String>>, le texte n'est pas filtré correctement (tout les éléments sont filtrés dès que je tape une lettre).

    Qu'est ce qui ne va pas dans mon code ? Le code ci-dessous concerne la solution avec l'ArrayList<HashMap<String, String>>)

    ListActivity :

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    public class myListActivity extends ListActivity{
     
        private ImageInDiscountCardListAdapter adapter;
        private EditText filterText;
        private ArrayList<HashMap<String, String>> retailerList;
        private HashMap<String, String> retailerInfo;
        private TextWatcher filterTextWatcher = new TextWatcher() {
     
            public void afterTextChanged(Editable s){
            }
     
            public void beforeTextChanged(CharSequence s, int start, int count, int after){
            }
     
            public void onTextChanged(CharSequence s, int start, int before, int count){
            	if (adapter!=null){
            		adapter.getFilter().filter(s);
            	}
            }
     
        };
     
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
     
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.my_layout);
     
    		addImageUrl();
     
    		this.filterText = (EditText) findViewById(R.id.name);
    		this.filterText.addTextChangedListener(filterTextWatcher); 	
     
    		this.adapter = new ImageInDiscountCardListAdapter(this, retailerList);
    		setListAdapter(adapter);
     
    	}
     
    	@Override
        public void onDestroy(){
     
            adapter.imageLoader.stopThread();
            setListAdapter(null);
            filterText.removeTextChangedListener(filterTextWatcher);
            super.onDestroy();
     
        }
     
        @Override
    	protected void onListItemClick(ListView l, View v, int position, long id){
     
    		//this.filterText.setText(this.item.get(position));
     
    	}
     
    	public void addImageUrl(){
     
    		this.retailerList = new ArrayList<HashMap<String,String>>();
     
    		this.retailerInfo = new HashMap<String, String>();
    		retailerInfo.put("name", "Fnac");
    		retailerInfo.put("imageUrl", "http://lesite.fr/wp-content/uploads/2010/09/FNAC.jpg");
    		this.retailerList.add(retailerInfo);
     
    		// etc...
     
    	}
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    public class ImageInDiscountCardListAdapter extends ArrayAdapter<HashMap<String, String>> {
     
    		private Activity activity;
    		private ArrayList<HashMap<String, String>> retailerList;
    		private static LayoutInflater inflater;
    		public ImageLoader imageLoader; 
     
    		public ImageInDiscountCardListAdapter(Activity activity, ArrayList<HashMap<String, String>> retailerList) {
     
    			super(activity, android.R.layout.simple_list_item_1, retailerList);
    			this.activity = activity;
    			this.retailerList = retailerList;
    			inflater = (LayoutInflater)this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    			this.imageLoader = new ImageLoader(this.activity.getApplicationContext());
     
    		}
     
    		public static class ViewHolder{
    			public TextView text;
    			public ImageView image;
    		}
     
    		public View getView(int position, View convertView, ViewGroup parent){
     
    			View view = convertView;
    			ViewHolder holder;
     
    			if(view == null){
    				view = inflater.inflate(R.layout.retailer_row, null);
    				holder = new ViewHolder();
    				holder.text=(TextView)view.findViewById(R.id.retailer_name);;
    				holder.image=(ImageView)view.findViewById(R.id.retailer_image);
    				view.setTag(holder);
    			}
     
    			else{
    				holder=(ViewHolder)view.getTag();
    			}
     
    			holder.text.setText(getItem(position).get("name"));
    			holder.image.setTag(this.retailerList.get(position).get("imageUrl"));
    			imageLoader.DisplayImage(this.retailerList.get(position).get("imageUrl"), activity, holder.image);
     
    			return view;
     
    		}
     
    	}

  2. #2
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    Je pense que tu devrais créer ta class Filter. ou tu pourrais redéfinir les procédures publishResults et FilterResults.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    @Override protected FilterResults performFiltering(CharSequence constraint)
        {
            return null;
        }
     
        @Override protected void publishResults(CharSequence constraint, FilterResults results)
        {
     
        }
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

Discussions similaires

  1. Bouton avec image dans une colonne d'un ListView
    Par infosam76 dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 08/11/2013, 23h56
  2. Modifier / Supprimer image avec SQLite dans une ListView
    Par monta007 dans le forum Composants graphiques
    Réponses: 0
    Dernier message: 08/03/2012, 12h08
  3. Ajouter image dans une ListView
    Par Dimitri_87 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 20/02/2007, 00h50
  4. Réponses: 3
    Dernier message: 24/01/2007, 20h37
  5. Réponses: 3
    Dernier message: 31/07/2006, 16h42

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