1

SharedPreferencesに値を格納するPreferenceActivityPがあります。これは機能しています。リストから選択でき、要約値が正しく表示されます。

問題は、アクティビティA内のSharedPreference値にアクセスしようとしたときです。保存された値の代わりに、デフォルト値がロードされます。アクティビティAからPreferenceActivityにアクセスした後でのみ、最新のSharedPreference値がアクティビティAで利用可能になります。これを解決する方法に関する提案はありますか?PreferenceManager.getDefaultSharedPreferencesを使用するオプションはありますか?

PreferenceActivityコードの大部分は次のとおりです(簡潔にするためにonSharedPreferenceChangedリスナーを省略しました)。

public class P extends PreferenceActivity { 
public static String KEY_PREF_show_watch_areas, KEY_PREF_time_format, KEY_PREF_date_format;
String PREF_show_watch_areas, PREF_time_format, PREF_date_format;
static SharedPreferences sharedPrefs;
Preference pref_show_watch_areas=null;
ListPreference pref_time_format=null, pref_date_format=null;

@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    sharedPrefs = PreferenceManager.getDefaultSharedPreferences( getApplicationContext() );
    KEY_PREF_show_watch_areas = getString(R.string.key_pref_show_watch_areas);
    KEY_PREF_time_format = getString(R.string.key_pref_time_format);
    KEY_PREF_date_format = getString(R.string.key_pref_date_format);
    PREF_show_watch_areas = getString(R.string.pref_show_watch_areas);
    PREF_time_format = getString(R.string.pref_time_format);
    PREF_date_format = getString(R.string.pref_date_format);

//Load up the preference items (from XML)  
    addPreferencesFromResource(R.xml.preferences);

    //DATE pref
    pref_date_format = (ListPreference) findPreference(KEY_PREF_date_format); //Set summary to user selected value
    pref_date_format.setSummary(pref_date_format.getEntry() ); 

    //TIME pref
    pref_time_format = (ListPreference) findPreference(KEY_PREF_time_format); //Set summary to show user selected value
    pref_time_format.setSummary(pref_time_format.getEntry()); 

    }

 }  // [END P]

アクティビティAのonResumeは次のとおりです。

  @Override
  protected void onResume() {
  super.onResume();

   SharedPreferences sharedPrefsResume = PreferenceManager.getDefaultSharedPreferences(getApplicationContext() );
   dateFormatPref = sharedPrefsResume.getString(P.KEY_PREF_date_format, "d-MMM-yy");
   timeFormatPref = sharedPrefsResume.getString(P.KEY_PREF_time_format, "h");

 } // [END onResume]
4

1 に答える 1

0

問題を発見して解決しました。初期化されていない変数(P.KEY_PREF_date_formatなど)を使用してSharedPrefs値にアクセスしようとしました。これが、デフォルト値が返される理由です。静的変数をMainActivityに移動して、初​​期化されていることを確認しました。出来上がり。SharePreferencesは現在期待どおりに機能しています。

于 2013-02-14T00:20:43.787 に答える