2013-07-08 3 views
0

У меня проблема с PreferenceActivity используется для настройки предпочтений для виджета приложения. Дело в том, что когда я хочу передать PreferenceActivity любую информацию через Intent только в первый раз, я могу их прочесть. После того, как информация, указанная в Intent, отличается, те ранее сохраненные сохранены, и я не вижу новых. Единственное, что нужно сделать, это удалить полностью приложение из системы и установить его снова. Но опять же все будет выглядеть так же (первая информация останется). Другая важная вещь заключается в том, что я не сохраняю ее нигде, просто показывая ее в тексте ярлыка и в LogCat.Как вы можете отправить более одного намерения в функцию предпочтения?

Те фрагменты кода отвечают за это:

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, намерение и т. Д., То даже если вы добавляете новые дополнительные функции, все последующие намерения будут фактически возвращать одно и то же первое намерение. Вот почему вы должны видеть, что данные, отправленные только в первый раз, достигают вашей активности предпочтений, а последующие намерения с разными значениями в дополнениях не имеют никаких эффектов. Поэтому, если вы хотите использовать одни и те же намеренные атрибуты для отправки обновленных дополнительных значений в активность предпочтений, вы должны использовать некоторые флаги, такие как FLAG_CANCEL_CURRENT or FLAG_UPDATE_CURRENT, чтобы указать, что есть изменения. Пожалуйста, прочитайте official document on pending intents, чтобы понять это.

Смежные вопросы