2013-07-08 25 views
0

我有問題PreferenceActivity用於設置應用程序窗口小部件的首選項。問題是,當我想通過Intent只有在第一次我能夠閱讀它們時通過PreferenceActivity任何信息。當在Intent發送的信息不同時,那些早先發送的信息仍然保存,我沒有看到新的。唯一要做的就是從系統中刪除完整的應用程序並重新安裝。但是,然後再次看起來都一樣(第一個信息將保持不變)。另一個重要的事情是我沒有將它保存在任何地方,只是在標籤文本和LogCat中顯示它。如何向PreferenceActivity發送多個Intent?

這些都是代碼段負責此:

的Widget活動

  // Actions required to open settings activity 
      Intent intentSettings = new Intent(context, PrefActivity.class); 
      intentSettings.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, 
        appWidgetIds); 
      intentSettings.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, (allWidgetIds.length+number)); 
      PendingIntent pendingIntentSettings = PendingIntent.getActivity(
        context, 0, intentSettings, 0); 
      remoteViews.setOnClickPendingIntent(R.id.imb_ustawienia, 
        pendingIntentSettings); 

偏好活動

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     Log.d("Info","onCreate"); 

     addPreferencesFromResource(R.xml.pref); 

     Bundle intentIn = getIntent().getExtras(); 
     Log.d("SIZE", "" + intentIn.size()); 
     if (intentIn == null) { 
      Log.d("Tag","Intent is empty"); 
     } 
     else 
     { 
      widgetId = intentIn.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); 
      allWidgetIds = intentIn.getIntArray(AppWidgetManager.EXTRA_APPWIDGET_IDS); 
      Log.d("Pref","id: " + widgetId + " ids: " + allWidgetIds.length); 
     } 

     final CheckBoxPreference checkboxPref1 = (CheckBoxPreference) getPreferenceManager().findPreference("checkboxPref1"); 

//... 

final Preference opt1 = (Preference) findPreference("settings1"); 
     opt1.setSummary("Widget's id: " + widgetId); 

     opt1.setOnPreferenceClickListener(new OnPreferenceClickListener() { 
//... 
} 

@Override 
    protected void onStop() { 
     super.onStop(); 
     Intent infoIntent = new Intent(DataAppWidgetProvider.FORCE_WIDGET_UPDATE); 
     infoIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, allWidgetIds); 
     this.sendBroadcast(infoIntent); 
     finish(); 

    } 

你知道,什麼可能是一個問題?它看起來像某種東西被保存在某處沒有我的意志,這是阻止一切。

回答

0

這些問題似乎與在您的窗口小部件活動中使用pendingintent有關。待定意圖的特點是,如果您發送具有相同意圖屬性(如requestcode,intent等)的後續意圖,那麼即使您添加新的附加,所有後續意圖實際上也會返回相同的第一個意圖。這就是爲什麼你必須看到,第一次發送的數據正在達到你的偏好活動,並且隨後的具有不同額外值的意圖沒有效果。因此,如果您想使用相同的意圖屬性將更新的額外值發送到偏好活動,那麼您必須使用一些標誌,如FLAG_CANCEL_CURRENT or FLAG_UPDATE_CURRENT來表示有變化。請閱讀official document on pending intents瞭解這一點。