2016-01-03 4 views
0

Я выполнил документацию, чтобы создать фрагмент предпочтений. Все мои настройки работают так, как ожидалось, но у меня есть параметр первого и последнего имени, который я бы хотел динамически загружать из SharedPreferences. Эти значения уже сохранены, когда пользователь вошел вЗагрузка ранее сохраненных данных из SharedPreferences в PreferenceFragment

Их значения в strings.xml:.

<string name="first_name">first_name</string> 
<string name="last_name">last_name</string> 

Их сохраняется на входе:

editor.putString(mContext.getResources().getString(R.string.first_name), firstName); 
editor.putString(mContext.getResources().getString(R.string.last_name), lastName); 
editor.commit(); 

предпочтения в preferences.xml:

<EditTextPreference 
       android:key="@string/first_name" 
       android:inputType="text" 
       android:persistent="true" 
       android:title="First Name"/> 
    <EditTextPreference 
       android:key="@string/last_name" 
       android:inputType="text" 
       android:persistent="true" 
       android:title="Last Name"/> 

Попытка загрузить их в Preference Фрагмент:

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     sessionManager = SessionManager.getInstance(getActivity()); 
     addPreferencesFromResource(R.xml.preferences); 
     PreferenceManager.setDefaultValues(getActivity(), R.xml.preferences, false); 

     // Set first and last name preference default values 
     firstNamePreference = (EditTextPreference)findPreference("first_name"); 
     lastNamePreference = (EditTextPreference)findPreference("last_name"); 
     nearbyPreference = (CheckBoxPreference)findPreference("show_places"); 
//  firstNamePreference.setText(sessionManager.getUserFirstName()); 
//  firstNamePreference.setSummary(sessionManager.getUserFirstName()); 
//  lastNamePreference.setText(sessionManager.getUserLastName()); 
//  lastNamePreference.setSummary(sessionManager.getUserLastName()); 
     nearbyPreference.setDefaultValue(true); 
    } 

Поэтому я могу установить их вручную (а также резюме), но мне бы очень хотелось установить их из уже установленных значений в SharedPreferences. Как я могу это сделать?

ответ

1

Таким образом, после просматривали мой код, я понял, что мое приложение хранит настройки в файле другого, чем по умолчанию. Таким образом, я должен был сделать следующее из this статьи:

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.preferences); 
     PreferenceManager.setDefaultValues(getActivity(), R.xml.preferences, false); 


     sharedPreferences = getActivity().getSharedPreferences("file_name", 0); // 0 is private 

     // show the current value in the settings screen 
     for (int i = 0; i < getPreferenceScreen().getPreferenceCount(); i++) { 
      pickPreferenceObject(getPreferenceScreen().getPreference(i)); 
     } 
    } 

private void pickPreferenceObject(Preference p) { 
     if (p instanceof PreferenceCategory) { 
      PreferenceCategory cat = (PreferenceCategory) p; 
      for (int i = 0; i < cat.getPreferenceCount(); i++) { 
       pickPreferenceObject(cat.getPreference(i)); 
      } 
     } else { 
      initSummary(p); 
     } 
    } 

private void initSummary(Preference p) { 
     if (p instanceof EditTextPreference) { 
      EditTextPreference editTextPref = (EditTextPreference) p; 
      String value = sharedPreferences.getString(editTextPref.getKey(), ""); 
      p.setSummary(value); 
      ((EditTextPreference) p).setText(value); 
     } 
     // More logic for ListPreference, etc... 
    } 

В противном случае вы могли бы, вероятно, просто установить их каждый с префов по умолчанию, доступ к которому, как так:

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); 
0

Что-то вроде этого является то, что вы должны смотреть на дела:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    addPreferencesFromResource(R.xml.preferences); 

    // Sets the first name based on the SharedPreference value 
    Preference pref = getPreferenceScreen().findPreference("first_name"); 
    pref.setSummary(pref.getSharedPreferences().getString("first_name", "default value if first_name key not set")); 

} 
+0

К сожалению, это не работает для меня :(@michaelcarrano – Brandon