Bonjour,

Je suis nouveau dans le monde Android et encore plus en Java. Certainement cette question va vous paraitre assez idiote mais bon comme je suis débutant je me permets de vous la poser quand-même.

Je commence à développer mon premier widget et donc j'ai créé pour cela deux classes :

1 - Main extends PreferenceActivity
2 - Widget extends AppWidgetProvider

(je suivi un tuto pour le faire)

la classe main a une propriété int mAppWidgetId qui (si j'ai bien compris) garde l'identifiant de l'appli

Le problème est que lors de l'update du widget on passe un tableau avec tous les instances du widget et donc il met à jours tous les widgets au lieu de le faire avec un seul.

Voici les classes :

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
 
 
public class Widget  extends AppWidgetProvider{
 
	@Override
	public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
 
		Update(context, appWidgetManager, appWidgetIds);
		super.onUpdate(context, appWidgetManager, appWidgetIds);
	}
 
	public static void Update(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds){
 
		SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
		String ville = settings.getString("ville", "Ville...");
		String temperature = null;
 
 
		try{
 
			// Recupere les infos du net
			URL myURL = new URL("http://www.google.com/ig/api?weather=" + ville);
 
			DocumentBuilderFactory fabrique = DocumentBuilderFactory.newInstance();
	    	DocumentBuilder constructeur = fabrique.newDocumentBuilder();
	    	Document document = constructeur.parse(myURL.openStream());
 
	    	Element racine = document.getDocumentElement();
 
	    	NodeList liste = racine.getElementsByTagName("current_conditions");
 
	    	NodeList n2 = liste.item(0).getChildNodes();
 
			temperature = ((Element) n2.item(2)).getAttribute("data");
 
		} catch (Exception e) {
 
			Log.e("Widget.java (56)",e.getLocalizedMessage());
 
		}
 
 
 
 
		for(int i=0; i<appWidgetIds.length; i++){
 
			RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main);
			views.setTextViewText(R.id.ville, ville);
			views.setTextViewText(R.id.temperature, temperature);
 
			appWidgetManager.updateAppWidget(appWidgetIds[i], views);
		}
 
 
	}
 
 
 
}
 
 
 
 
 
 
public class Main extends PreferenceActivity {
 
	int mAppWidgetId;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        addPreferencesFromResource(R.xml.preferences);
 
        setResult(RESULT_CANCELED);
 
        Bundle extras = getIntent().getExtras();
 
        if(extras != null)
        	mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); 
 
        if(mAppWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID)
        	finish();
 
        Intent resultvalue = new Intent();
        resultvalue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
 
 
        setResult(RESULT_OK, resultvalue);
 
    }
 
    @Override
    protected void onDestroy() {
 
    	Widget.Update(this, AppWidgetManager.getInstance(this), new int[] {mAppWidgetId});
 
    	super.onDestroy();
    }
}
J'aimerais pouvoir faire au lieu de la boucle dans widget.update quelque chose dans ce genre :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main);
views.setTextViewText(R.id.ville, ville);
views.setTextViewText(R.id.temperature, temperature);
 
appWidgetManager.updateAppWidget(Main.mAppWidgetId, views);
Est cela possible ?

Merci