Bonjour à toutes et à tous. J'ai réussi à développer mon premier widget, il affiche bien la date et l'heure en temps réel. Pour Améliorer ce dernier j'aimerais que l'utilisateur puisse le personnaliser. Ainsi, pour ce faire j'ai pensé aux SharedPreferences. Pour m'initier à l'utilisation de ce concept j'ai pensé faire un mémo qui afficherait sur le bureau (grâce à un textview) le contenu d'un EditTextPreference. Mon problème est le suivant Chaque instance de mon widget va lire le même fichier de preference. Comment créer de manière dynamique un fichier de preference dont le nom serait preference+WidgetId. Je vous remercie par avance de bien vouloir m'aider à y voir plus clair. Voici mon 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
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
 
package loris.widget2.memo;
 
 
 
 
 
 
import android.app.Activity;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.preference.PreferenceManager;
import android.widget.RemoteViews;
import android.widget.Toast;
import android.content.SharedPreferences;
 
 
public class memoActivity extends AppWidgetProvider {
 
	private static final String INTENT_CLICK = "loris.widget2.memo.click1";
	private static final Integer ALL_WIDGETS = -1;
 
 
	@Override
	public void onReceive(Context context, Intent intent) {
		super.onReceive(context, intent);
 
		if (INTENT_CLICK.equals(intent.getAction())) {
		int appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,ALL_WIDGETS);	
		buildView(context,appWidgetId);  
		}
 
 
		}
 
	@Override
	public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
		super.onUpdate(context, appWidgetManager, appWidgetIds);
		buildView(context,ALL_WIDGETS);
	}
 
 
 
	/************************************************/
	private void buildView(Context context,int widgetId){
 
		SharedPreferences preferences;
 
		AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
		ComponentName componentName = new ComponentName(context, memoActivity.class);
		int[] appWidgetIds = appWidgetManager.getAppWidgetIds(componentName);
		final int N = appWidgetIds.length;
		RemoteViews views; 
		int appWidgetId;
		for (int i = 0; i < N; i++) {
		appWidgetId = appWidgetIds[i];
		if ((widgetId == ALL_WIDGETS) || (widgetId == appWidgetId)) {
 
			views = new RemoteViews(context.getPackageName(), R.layout.main);
			//preferences = context.getSharedPreferences("preference", Activity.MODE_PRIVATE);
			preferences = PreferenceManager.getDefaultSharedPreferences(context);
 
		views.setTextViewText(R.id.hello_world_widget, preferences.getString("EditTextKey", "mmmmmmm"));
 
	        Intent intent2 = new Intent(context, memoActivity2.class);
	        intent2.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
	        int appWidgetId25 = intent2.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,AppWidgetManager.INVALID_APPWIDGET_ID);
	        //Toast.makeText(context,"Test 1298 : "+ String.valueOf(widgetId), Toast.LENGTH_LONG).show();
	        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,	intent2, 0);
 
			views.setOnClickPendingIntent(R.id.hello_world_widget, pendingIntent);
 
			appWidgetManager.updateAppWidget(appWidgetId, views);
		}
 
		}
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
 
package loris.widget2.memo;
 
 
 
 
import android.app.Activity;
import android.appwidget.AppWidgetManager;
import android.content.ComponentName;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.widget.RemoteViews;
import android.widget.TextView;
import android.widget.Toast;
 
 
public class memoActivity2 extends PreferenceActivity implements OnSharedPreferenceChangeListener {
	TextView hello_world_widget = null;
	SharedPreferences pref;
	  @Override
	    public void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
	        //setContentView(R.layout.main2);
	        addPreferencesFromResource(R.xml.preference);
 
	       pref = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
            pref.registerOnSharedPreferenceChangeListener(this);
 
            AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getBaseContext());
 
            Intent launchIntent = getIntent();
	        Bundle extras = launchIntent.getExtras();
			int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,AppWidgetManager.INVALID_APPWIDGET_ID);
          //  Toast.makeText(getBaseContext(),"Test 19 : "+ String.valueOf(getBaseContext().), Toast.LENGTH_LONG).show();
	  }
 
	  @Override
	  public void onSharedPreferenceChanged(SharedPreferences preference, String key){
 
 
		  AppWidgetManager appWidgetManager2 = AppWidgetManager.getInstance(getBaseContext());
		  ComponentName componentName = new ComponentName(getBaseContext(), memoActivity.class);
		  int[] appWidgetIds = appWidgetManager2.getAppWidgetIds(componentName);
		  final int N = appWidgetIds.length;
		  int appWidgetId;
			for (int i = 0; i < N; i++) {
			appWidgetId = appWidgetIds[i];
			//Toast.makeText(getBaseContext(),"Test 147 : "+ String.valueOf(appWidgetId), Toast.LENGTH_LONG).show();
			 RemoteViews views; 
			 views = new RemoteViews(getBaseContext().getPackageName(), R.layout.main);
			 views.setTextViewText(R.id.hello_world_widget, preference.getString(key, "") );
 
			appWidgetManager2.updateAppWidget(appWidgetId, views);
 
			}
 
	  }