構成アクティビティ、大規模なウィジェット プロバイダー、および小規模なウィジェット プロバイダーがあります。構成アクティビティから、共有設定にいくつかの値を保存します。大小のアプリ ウィジェット プロバイダーから、これらの共有設定を取得します。アプリ ウィジェットに一意の ID を与えることができず、構成アクティビティからアプリ ウィジェット プロバイダーに移動するたびに、異なる共有設定を使用したいと考えています。どうすればこれを達成できますか。
1947 次
1 に答える
6
アプリ ウィジェットの各インスタンスに一意のウィジェット ID を付与するには、次のようにします。
AppWidgetManager appWidgetManager = AppWidgetManager
.getInstance(ConfigurationActivity.this);
ComponentName thisAppWidget = new ComponentName(
ConfigurationActivity.this, WidgetProvider.class);
int[] appWidgetIds = appWidgetManager
.getAppWidgetIds(thisAppWidget);
Intent startBroadcast = new Intent(ConfigurationActivity.this,
WidgetProvider.class);
startBroadcast.putParcelableArrayListExtra("list", newsList);
startBroadcast.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS,
appWidgetIds);
startBroadcast.setAction("android.appwidget.action.APPWIDGET_UPDATE");
sendBroadcast(startService);
一意の共有設定でデータを保存するには、次のようにします。
public void setWidgetNewsCategory(Context context, String category,
int appWidgetId) {
Editor editor = context.getSharedPreferences(
PREFS_NAME_CATEGORY + String.valueOf(appWidgetId),
Context.MODE_PRIVATE).edit();
editor.putString(PREFS_VALUE_CATEGORY + String.valueOf(appWidgetId),
category);
editor.commit();
}
この共有設定値は次のように取得できます。
public String getWidgetNewsCategory(Context context, int appWidgetId) {
SharedPreferences sharedPreferences = context.getSharedPreferences(
PREFS_NAME_CATEGORY + String.valueOf(appWidgetId),
Context.MODE_PRIVATE);
return sharedPreferences.getString(
PREFS_VALUE_CATEGORY + String.valueOf(appWidgetId), null);
}
最後に、ウィジェット プロバイダーの onReceive メソッドで、次のようにします。
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)) {
Bundle extras = intent.getExtras();
if (extras != null) {
int[] appWidgetIds = extras
.getIntArray(AppWidgetManager.EXTRA_APPWIDGET_IDS);
if (appWidgetIds.length > 0) {
this.onUpdate(context, AppWidgetManager.getInstance(context), appWidgetIds);//here you can call onUpdate method, and update your views as you wish
}
}
} else if (AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)) {
Bundle extras = intent.getExtras();
if (extras != null
&& extras.containsKey(AppWidgetManager.EXTRA_APPWIDGET_ID)) {
final int appWidgetId = extras
.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID);
this.onDeleted(context, new int[] { appWidgetId });
}
} else if (AppWidgetManager.ACTION_APPWIDGET_ENABLED.equals(action)) {
this.onEnabled(context);
} else if (AppWidgetManager.ACTION_APPWIDGET_DISABLED.equals(action)) {
this.onDisabled(context);
}
}
これは私のために働いた一般的な解決策です。うまくいけば、それはあなたにとってもうまくいくでしょう。
于 2013-02-11T09:05:30.687 に答える