Когда создается файл общих предпочтений?

Я хотел знать, когда создается общий файл предпочтений, созданный в первый раз?

У меня есть следующий код:

<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title="User settings"> <EditTextPreference android:title="User Name" android:key="userName" android:summary="Please Enter User Name"></EditTextPreference> <EditTextPreference android:title="Password" android:key="password" android:summary="Password Here" android:inputType="textPassword"></EditTextPreference> </PreferenceCategory> </PreferenceScreen> public class PrefsActivity extends PreferenceActivity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.prefs); } } 

Кроме того, как я могу использовать getSharedpreference (), с именем файла? Я не знаю, должен ли я сначала создать этот файл и поместить его в каталог данных приложения?

Я имел в виду, когда сначала создается файл общих предпочтений: когда приложение установлено или через некоторое время? Если позже, когда?

Метод getSharedPreferences(name, mode) автоматически создает файл с указанным именем, поэтому вам не нужно его создавать. Фактически, точное местоположение и имя этого файла предпочтения не документированы, поэтому я бы посоветовал вам не полагаться на некоторые соглашения при попытке получить доступ к этому файлу напрямую , так как местоположение и имя могут быть изменены в будущем – SharedPreferences должны быть Единственный способ доступа к этому файлу.

Файл предпочтений с определенным именем создается при getSharedPreferences(name, mode) или addPreferencesFromResource(preferencesResId) .

Я не уверен на 100%, о чем вы говорите.

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

 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); String username = preferences.getString("username", "defaultvalue"); String password = preferences.getString("password", "defaultvalue"); 

Этот код будет получать SharedPreferences для вашего PreferenceScreen после их установки. Если они не были установлены, вы используете значения по умолчанию.

Общие настройки будут созданы в /data/data/appname/shared_prefs/prefs_name.xml

Как упоминалось в других комментариях, вы никогда не будете напрямую взаимодействовать с файлами общих настроек. Вы читаете и записываете значения для них, используя объект SharedPreferences. Метод Context.getSharedPreferences() принимает в качестве первого аргумента строку (имя файла общих предпочтений, с которым вы хотите взаимодействовать) и возвращает объект SharedPreferences . Согласно документации для getSharedPreferences() :

Если файл предпочтений по этому имени не существует, он будет создан при получении редактора (SharedPreferences.edit ()) и последующем фиксации изменений (Editor.commit ()).

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

Например:

Метод Activity.getPreferences()

Просто вызывает базовый метод getSharedPreferences (String, int), передавая имя класса этой активности в качестве имени предпочтений.

Вы должны установить намерение предпочтения в onCreateOptionMenu .

 public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu, menu); return super.onCreateOptionsMenu(menu); } public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.setting: startActivity(new Intent(this,Settingpage.class)); Toast.makeText(this, "setting clicked", Toast.LENGTH_LONG).show(); break; } return true; }