ユーザーが名前を指定する必要があるウィジェットを作成しようとしています。その名前に基づいて、データが収集されて表示されます。ウィジェットには、このデータを更新するための更新ボタンがあります。
問題は、構成クラスとAppWidgetProviderクラスの間でこの名前を共有することです。私が試したこと:
- ウィジェットでEditTextを使用するだけです。configクラスで、EditTextに名前を設定し、AppWidgetProviderクラスで取得します。AWPでテキストを取得する方法が見つからないため、これは機能しません。
- SharedPreferencesを使用します。
構成クラス:
c = SelectWidgetStationActivity.this;
// Getting info about the widget that launched this Activity.
Intent i = getIntent();
Bundle extras = i.getExtras();
if (extras != null)
awID = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(c);
prefs.edit().putString("widgetname" + awID, name);
prefs.edit().commit();
AWPクラスの場合:
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(ACTION_WIDGET_RECEIVER)) { //ACTION_WIDGET_RECEIVER is the action fired by the refresh button
this.onUpdate(context, AppWidgetManager.getInstance(context), AppWidgetManager.getInstance(context).getAppWidgetIds(new ComponentName("com.app.myapp", "com.app.myapp.MyWidgetProvider")));
}
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
for (int widgetId : appWidgetIds) {
name = prefs.getString("widgetname" + widgetId, "N/A"));
//more code
name
私に「N/A」を与え続けます。私はそれをチェックしawID
、widgetId
等しいです。これはおそらく、私が異なるコンテキストを使用しているという事実によるものですか?(ここで推測するだけです)
では、この問題を解決する方法は何ですか?
編集 画面にコンテキストを印刷すると、次のようになります。
構成クラス:
com.app.myapp.WidgetConfigActivity@40774d18
AWPクラス:
android.app.ReceiverRestrictedContext@406ad290