2010-06-25 53 views
2

PreferenceActivity看起來像一個非常簡單的助手類來管理應用程序的偏好。從小部件使用PreferencesActivity?

我想也使用小部件中的同一個類。

在小部件的第一個實例中,我希望PreferenceActivity出現。這是很容易做的配置活動,但這裏是故障...

我不知道什麼時候偏好編輯完成!

我在網上看到的所有窗口小部件首選項的所有示例都使用手動構建的首選項屏幕而不是PreferenceActivity幫助程序類,然後偵聽單擊的「保存」按鈕。

如何使用PreferenceActivity做到這一點,因爲該活動沒有保存按鈕。您只需使用「返回」按鈕來提交您的首選項更改。

謝謝!

+0

這可能也幫助你:http://stackoverflow.com/questions/2697233/how-to-add-a-button-to-preferencescreen – 2011-10-07 08:56:15

回答

4

我一直在嘗試做同樣的事情,我想我已經破解了它。我在PreferenceActivity中處理onBackPressed()事件,並使用sendBroadcast()從那裏執行小部件更新。

在PreferenceActivity:

@Override 
public void onBackPressed() { 
    Intent intent=getIntent(); 
    Bundle extras=intent.getExtras(); 
    int widgetId=extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); 

    // this is the intent broadcast/returned to the widget 
    Intent updateIntent = new Intent(this, WidgetProvider.class); 
    updateIntent.setAction("PreferencesUpdated"); 
    updateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId); 
    sendBroadcast(updateIntent); 
} 

在你WidgetProvider:

@Override 
public void onReceive(Context context, Intent intent) { 
    if ("PreferencesUpdated".equals(action)) { 
     // update your widget here 
     // my widget supports multiple instances so I needed to uniquely identify them like this 
     RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.widget); 
     int appWidgetId = intent.getExtras().getInt(AppWidgetManager.EXTRA_APPWIDGET_ID); 
     updateWidgetView(context, remoteView, appWidgetId); 
    } 
} 

注意:在1.5 onBackPressed不支持這麼註釋掉@覆蓋了onBackPressed並添加該代碼

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    Log.d(LOG_TAG, "onKeyDown() "+ keyCode); 
    if (keyCode==KeyEvent.KEYCODE_BACK && Integer.parseInt(Build.VERSION.SDK)<5) { 
     onBackPressed(); 
    } 
} 

我應該補充一點,我是Android開發的新手,所以我可能完全是這樣做的錯了。我只能說這對我很有用:)

讓我知道你是怎麼回事。

+1

這沒有幫助...哪裏是updateWidgetView()定義?這將如何適用於更新所有小部件? – swinefeaster 2012-05-30 06:18:41

+0

@swinefeaster只需在提供者中使用this.onUpdate – 2013-03-28 19:44:00

0

您應該能夠通過實施SharedPreferences.OnShredPreferenceChangeListener來確定首選項編輯完成的時間。使用此功能,只有在某些鍵被更改時纔可以更新,或者在更改某些鍵時無條件更新。請記住在PreferenceActivity onCreate中註冊它並在onDestroy中取消註冊。

在這種情況下,您可以在偵聽器中執行與Android: How do I force the update of all widgets of a particular kind類似的操作,以便基於SharedPreference更改來更新所有小部件。

這是一個古老的問題,所以這可能不再相關。