2013-07-08 23 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了解这一点。