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+