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 :

problème avec listView


Sujet :

Composants graphiques Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 21
    Par défaut problème avec listView
    Bonsoir à tous,

    J'ai trouvé plusieurs tutoriels sur les ListView concernant les updates mais je n'arrive pas à mettre à jour ma listView. En fait, l'utilisateur doit à chaque fois faire défiler la liste sinon celle-ci ne se met pas à jour....

    Par contre j'ai un second problème, les données affichées dans ma ListView ne correspondent pas avec celles de mon ArrayList après avoir fait défilé la listView....


    Au niveau du code,

    j'ai un 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
     
     
    ....
     
    private class ViewHolder {
    		TextView tvTitre;
    		TextView tvDisponible;
    		TextView tvSecteur;
    		TextView tvPayant;
    		ImageView ivPark;
    		TextView tvSeparator;
    	}
     
    	@Override
    	public View getView(int position, View convertView, ViewGroup parent) {
     
    		ViewHolder holder;
     
    		if (convertView == null) {
     
    			holder = new ViewHolder();
     
    			convertView = inflater.inflate(R.layout.row, null);
     
    			holder.tvSeparator = (TextView)convertView.findViewById(R.id.separator);
    			holder.tvSeparator.setHeight(0);
    			holder.tvSeparator.setBackgroundDrawable(null);
     
    			holder.tvTitre = (TextView) convertView.findViewById(R.id.title);
    			holder.tvTitre.setTextColor(Color.WHITE);
     
    			holder.tvDisponible = (TextView) convertView.findViewById(R.id.available);
    			long nbrAv = cellules.get(position).getAvailable();
    			holder.tvDisponible.setTextColor(nbrAv>25 ? Color.GREEN : Color.RED);
     
    			holder.tvPayant = (TextView) convertView.findViewById(R.id.euro);
    			holder.tvSecteur = (TextView) convertView.findViewById(R.id.secteur);
    			holder.ivPark = (ImageView) convertView.findViewById(R.id.imgpark);
     
    			convertView.setTag(holder);
     
    		} else {
     
    		holder = (ViewHolder) convertView.getTag();
    		holder.tvTitre.setText(cellules.get(position).getName()+" ");
    		holder.tvSecteur.setText(cellules.get(position).getSecteur());
    		holder.tvDisponible.setText("("+String.valueOf(cellules.get(position).getAvailable())+") ");
    		holder.ivPark.setImageResource(getParkingPhoto(position));
    		holder.tvPayant.setText("Gratuit");
    		}
     
    return convertView;
    	}
     
    ....

    Et dans mon activité principale j'ai ce 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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
     
     
    public class Launch extends ListActivity implements View.OnClickListener {
     
    	public static Park myPark = null;
    	public static CelluleAdapter celluleadap= null;
    	private Button map = null;
    	private Button proximite = null;
    	private Button categorie = null;
    	private Button gratuit = null;
    	private Button alphabetique = null;
     
    	@SuppressWarnings("unchecked")
    	public void onCreate(Bundle icicle) {
    		super.onCreate(icicle);
    		setContentView(R.layout.launch);
     
    		categorie = (Button) findViewById(R.id.categorie);
    		gratuit = (Button) findViewById(R.id.payants);
    		proximite = (Button) findViewById(R.id.proximite);
    		alphabetique = (Button) findViewById(R.id.alphabetique);
    		map = (Button) findViewById(R.id.mapBt);
     
    		categorie.setOnClickListener(this);
    		gratuit.setOnClickListener(this);
    		proximite.setOnClickListener(this);
    		alphabetique.setOnClickListener(this);
    		map.setOnClickListener(this);
     
    		Collections.sort(Loading.parks, new Comparator() {
    			public int compare(Object o1, Object o2) {
    				Park p1 = (Park) o1;
    				Park p2 = (Park) o2;
    				return ((String) p1.getName()).compareTo((String) p2.getName());
    			}
    		});
     
    		celluleadap = new CelluleAdapter(this, Loading.parks);
    		setListAdapter(celluleadap);
    		celluleadap.notifyDataSetChanged();
     
    		Intent intent = new Intent(this,BackgroundService.class);  
    		startService(intent); 
    	}
     
    ...
    Voilà mon service d'update :

    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
     
     
    public class BackgroundService extends Service implements IBackgroundService { 
     
    	private Timer timer ; 
    	private static IBackgroundService service; 
     
    	@Override
    	public void onCreate() { 
    	    super.onCreate(); 
    	    timer = new Timer(); 
    	    service = this; 
    	} 
     
    	private List<IBackgroundServiceListener> listeners = null; 
     
    	public void addListener(IBackgroundServiceListener listener) { 
    	    if(listeners == null){ 
    	        listeners =  new ArrayList<IBackgroundServiceListener>(); 
    	    } 
    	    listeners.add(listener); 
    	} 
     
    	@Override 
    	public void onDestroy() { 
    	    this.listeners.clear(); 
    	    this.timer.cancel(); 
    	} 
     
    	public void removeListener(IBackgroundServiceListener listener) { 
    	    if(listeners != null){ 
    	        listeners.remove(listener); 
    	    } 
    	} 
     
    	// Notification des listeners 
    	private void fireDataChanged(Object data){ 
    	    if(listeners != null){ 
    	        for(IBackgroundServiceListener listener: listeners){ 
    	            listener.dataChanged(data); 
    	        } 
    	    } 
    	}
     
    	public static IBackgroundService getService() {
    		return service;
    	}
     
    	boolean truc = false;
    	@Override 
    	public int onStartCommand(Intent intent, int flags, int startId) { 
    	    timer.scheduleAtFixedRate(new TimerTask() { 
    	        public void run() { 
    // Cette ligne de code va mettre à jour mon ArrayList de la listView
    //	    	    HttpRequestPark.updateAllParks(Constants.URL_ALL_PARKS);
    	        	Launch.celluleadap.notifyDataSetChanged();
    //	        	fireDataChanged(Loading.parks);
    	        } 
    	    }, 0, 80000); 
     
    	    return START_NOT_STICKY; 
    	} 
     
    	@Override
    	public IBinder onBind(Intent intent) {
    		return null;
    	}
    }
    a+

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 21
    Par défaut
    Salut,

    J'ai résolu une partie du problème .... désormais ma listView se met à jour avec les bons éléments de mon arrayList.

    Par contre, comment mettre à jour ma listView sans la faire défiler ou toucher l'écran ?

    Dans mon BackgroundService, j'ai désormais ça dans ma méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    public int onStartCommand(Intent intent, int flags, int startId) { 
    	    timer.scheduleAtFixedRate(new TimerTask() { 
    	        public void run() { 
    	    	    HttpRequestPark.updateAllParks(Constants.URL_ALL_PARKS);
    	        	fireDataChanged(Loading.parks);
    	        } 
    	    }, 0, 80000); 
     
    	    return START_NOT_STICKY; 
    	}

    Je sais qu'il existe un UI Thread......
    Mais dans mon cas, comment l'utiliser ? Je dois mettre à jour ma listView qui est dans ma listActivity Launch.

    En allant sur un tutoriel du site, j'ai trouvé ce bout de code qui pourrait m'aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
              runOnUiThread(new Runnable() {
        	           @Override
        	           public void run() {
        	           		//code exécuté par l'UI thread
        	            	mTextView.setText(resultat);
        	            }
        	        });
    Faut-il l'implémenter dans ma méthode décrite ci-dessus ?

Discussions similaires

  1. Problème avec ListView
    Par slama007 dans le forum Composants graphiques
    Réponses: 1
    Dernier message: 27/07/2012, 14h49
  2. Problème avec Listview Insert
    Par restesouple dans le forum Windows Forms
    Réponses: 1
    Dernier message: 09/04/2008, 06h29
  3. Problème avec ListView et multiselect
    Par dadooo dans le forum Windows Forms
    Réponses: 1
    Dernier message: 17/06/2007, 15h45
  4. Problème avec listview
    Par Svenna dans le forum Général VBA
    Réponses: 9
    Dernier message: 27/01/2007, 16h55
  5. [C#] Problème avec ListView
    Par yannick dans le forum Windows Forms
    Réponses: 4
    Dernier message: 03/06/2004, 17h29

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