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 une listView depuis un menu et sans utiliser d'EditText


Sujet :

Composants graphiques Android

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Filtrer une listView depuis un menu et sans utiliser d'EditText
    Le titre n'est peut-être pas trés clair, mais j'ai une appli qui contient une listView que j'ai créé directement en java comme ceci :
    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
    public static ArrayList<ListAlarme> getAListOfAlarms() {
    		ArrayList<ListAlarme> listAl = new ArrayList<ListAlarme>();
     
    		listAl.add(new ListAlarme("alarme1 ", "type1 ","SMS", defaut));
    		listAl.add(new ListAlarme("alarme2 ", "type2 ","ESD", grave));
    		listAl.add(new ListAlarme("alarme3 ", "type3 ","MAS", grave));
    		listAl.add(new ListAlarme("alarme4 ", "type4 ","SMS", defaut));
    		listAl.add(new ListAlarme("alarme5 ", "type5 ","ESD", defaut));
    		listAl.add(new ListAlarme("alarme6 ", "type6 ","MAS", grave));
    		listAl.add(new ListAlarme("alarme7 ", "type7 ","SMS", defaut));
    		listAl.add(new ListAlarme("alarme8 ", "type8 ","MAS", grave));
    		listAl.add(new ListAlarme("alarme9 ", "type9 ","ESD", grave));
    		listAl.add(new ListAlarme("alarme10", "type10","SMS", defaut));
    		listAl.add(new ListAlarme("alarme11", "type11","ESD", grave));
    		listAl.add(new ListAlarme("alarme12", "type12","SMS", grave));
    		listAl.add(new ListAlarme("alarme13", "type13","MAS", defaut));
    		listAl.add(new ListAlarme("alarme14", "type14","SMS", grave));
     
    		return listAl;
    Et j'ai crée un menu comportant un onglet "filtres" qui renvoie vers un sousmenu dont voici le code :
    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
    /**----Choix du Filtre----*/
                 case R.id.filter:
                	 break;
                 case R.id.ESDfilter:
                	 Toast.makeText(this, "ESD filter choosed", Toast.LENGTH_LONG).show();
                	 list = (ListView)findViewById(R.id.listalarme);            	 
                 //    adapter = (AlarmeAdapter)list.getAdapter();
                	 list.setTextFilterEnabled(true);
                //	 list.setFilterText("ESD");
                	 list.getTextFilter();
                	// adapter.notifyDataSetChanged();
                	 break;
                 case R.id.SMSfilter:
                	 Toast.makeText(this, "SMS filter choosed", Toast.LENGTH_LONG).show();
                	 break;
                 case R.id.MASfilter:
                	 Toast.makeText(this, "MAS filter choosed", Toast.LENGTH_LONG).show();
                	 break;
                 case R.id.defaultfilter:
                	 Toast.makeText(this, "Default filter choosed", Toast.LENGTH_LONG).show();
                	 list = (ListView)findViewById(R.id.listalarme);            	 
                     adapter = (AlarmeAdapter)list.getAdapter();   
                     filtredefaut = false;
                     adapter.notifyDataSetChanged();
                	 break;
                 case R.id.gravefilter:
                	 Toast.makeText(this, "Grave filter choosed", Toast.LENGTH_LONG).show();
                	 break;
    Comme on le voit dans les partie commentées de ce code j'ai essayé d'utiliser setTextFilter et getTextFilter mais sans succés.

    Aprés quelques recherches j'ai trouvé ce tuto qui est trés bien expliqué, mais je ne réussis pas à l'adapter à mon appli, ma liste étant plus compexe que celle créer dans le tuto.

    J'aimerais donc un peu d'aide et de conseils pour savoir comme réussir à n'afficher, par exemple, que les alarmes de type SMS lorsque je clique sur "filter SMS" de mon sousmenu.

    Il faut aussi savoir que dans cette appli je passe pas un adapter pour implémenter et modifier mon layout, au cas où voici le code de mon 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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    public class AlarmeAdapter extends BaseAdapter{
     
    	private List<ListAlarme> mListA;
    	public int j;
    	public static int etat;
        public final static  int ACKKED = 1;
        public final static  int NO_ACKKED = 0;
        public ImageButton ackbutton;
    	private Context mContext;
    	private LayoutInflater mInflater;
    	public AlarmeAdapter(Context context, List<ListAlarme> aListA, int state) {
    		  mContext = context;
    		  mListA = aListA;
    		  mInflater = LayoutInflater.from(mContext);
    		  etat = state;
     
    		}
    	public int getCount() {
    		  return mListA.size();
    		}
     
    	public Object getItem(int position) {		
    		return mListA.get(position);
    		}
     
    	public long getItemId(int position) {  
    		  return position;
    		}
     
    		/**-----Début getView---------*/
    	public View getView(final int position, View convertView, ViewGroup parent) 
    	{
    		  LinearLayout layoutItem;
    		  if (convertView == null) {
    		    layoutItem = (LinearLayout) mInflater.inflate(R.layout.alarme_layout, parent, false);
    		  } 
    		  else 
    		  {
    		  	layoutItem = (LinearLayout) convertView;
    		  }      
    		  TextView alarmeID = (TextView)layoutItem.findViewById(R.id.alarme_id);
    		  TextView alarmeType = (TextView)layoutItem.findViewById(R.id.alarme_type);
    		  TextView alarmeGrp = (TextView)layoutItem.findViewById(R.id.alarme_groupe);
    		  ackbutton = (ImageButton)layoutItem.findViewById(R.id.ackbutton);
    		  alarmeID.setText(mListA.get(position).idAlarme);
    		  alarmeType.setText(mListA.get(position).typeAlarme);
    		  alarmeGrp.setText(mListA.get(position).grpAlarme);
    		 ListAlarme itemgenre = mListA.get(position);
                  if (itemgenre.genre == ListAlarme.grave){  
                	  layoutItem.setBackgroundColor(Color.RED);
                  }
                  else {           	 
               	  	 if (ManagementAlarm.filtredefaut == true){
               	  		 layoutItem.removeViewAt(ListAlarme.defaut);
               	  	 }else {
               	  		 layoutItem.setBackgroundColor(Color.YELLOW);
               	  	 }
                 }          
     
    		layoutItem.setTag(position);			
    		layoutItem.setOnLongClickListener(new OnLongClickListener(){
    			@Override
    			public boolean onLongClick(View v) {
    				ManagementAlarm.longClick = true;
    				Integer position = (Integer)v.getTag();
    				sendListener(mListA.get(position), position);
    				return true;
    			}
    		});
     
    		layoutItem.setOnClickListener(new OnClickListener(){				 
    			@Override
    			public void onClick(View v) {
    				sendListener(mListA.get(position), position);
    			}
    		});	
     
            if (ManagementAlarm.varack[position] == 1){
    			ackbutton.setVisibility(4);
    		}	
            else {
            	ackbutton.setVisibility(0);
            }
     
    		ackbutton.setOnClickListener(new OnClickListener(){
    			@Override
    			public void onClick(View v) {
    				if(ManagementAlarm.varack[position] == 0){
    					Toast.makeText(mContext, "the alarm : "+ManagementAlarm.listP.get(position).idAlarme+" is ack", Toast.LENGTH_LONG).show();
    					v.setVisibility(4);
    					ManagementAlarm.varack[position] = 1;
    				}
    				else{
    					Toast.makeText(mContext, "you have already ack "+ManagementAlarm.listP.get(position).idAlarme, Toast.LENGTH_LONG).show();					
    				}
    			  }			
    		});	
            return layoutItem;
    	}	
     
    			/**-----Fin getView---------*/
     
        private ArrayList<AlarmeAdapterListener> myListListener = new ArrayList<AlarmeAdapterListener>();
        public void addListener(AlarmeAdapterListener aListener) 
        {
        	myListListener.add(aListener);
        }
        private void sendListener(ListAlarme item, int position) 
        {
        	for(int i = myListListener.size()-1; i >= 0; i--) 
        	{
        		if (ManagementAlarm.longClick == true){
        		myListListener.get(i).OnLongClick(item, position);
        		} 
        		else 
        		{
        		myListListener.get(i).OnClick(item, position);
        		}    		
        	}
        }
    	public interface AlarmeAdapterListener 
    	{
    	  	public boolean OnLongClick(ListAlarme item, int position);
    	  	public void OnClick(ListAlarme item, int position);	  	
    	}
    	public void setEtat (int nvetat) {
    		   etat = nvetat;
    	}
    }
    Comme vous le voyez j'avais essayé de faire passer une variable qui affiche ou non les lignes de la listView mais cela n'a pas marché.
    Donc aprés avoir tester quelques solutions je viens vers vous pour savoir quelle serait la solution la plus efficace, et surtout qui marcherait avec ma liste.
    Merci d'avance
    Dernière modification par Invité ; 19/07/2011 à 09h15.

Discussions similaires

  1. Appel d'une fenêtre depuis le menu principal
    Par vg-matrix dans le forum VB.NET
    Réponses: 19
    Dernier message: 23/07/2010, 19h31
  2. Comment faire pour une interface avec un menu ribbon ? sans onglet
    Par Yogy dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 20/01/2010, 15h58
  3. Activer une Popup depuis un menu dynamique !
    Par marynes dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 26/04/2008, 12h51
  4. Exécuter une macro depuis le menu contextuel du clic droit?
    Par drthodt dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/02/2008, 19h12
  5. Charger une page depuis un menu déroulant ?
    Par tomguiss dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 14/10/2005, 08h32

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