我正在嘗試製作一個小部件,用戶必須提供一個名稱。根據該名稱收集並顯示數據。在小部件中有一個刷新按鈕來刷新這些數據。小工具:存儲用戶首選項
問題是在配置類和AppWidgetProvider類之間共享此名稱。我試過的東西:
- 只需使用小部件中的EditText。在配置類中,在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
是相等的。 這可能是由於我使用不同的上下文的事實? (這裏只是猜測)
那麼解決這個問題的方法是什麼?
編輯 當我打印屏幕上的背景下,我得到如下:
AWP類:
[email protected]
好的。有效!這是我第一次沒有存儲編輯器,僅僅是因爲我正在測試這些東西,並希望更快地輸入(2行而不是3)。那麼我猜'更快'一點沒有真正解決^ ^(順便說一句,我現在把它鏈接起來,使它1行= D) – nhaarman
好吧,正如你所說,你總是可以像最後一個代碼片段這樣的鏈接編輯器方法。那只是一條線。 (編輯ehehe我太慢了:) :) – 2011-11-08 14:16:50
哈哈,謝謝! – nhaarman