2012-03-05 61 views
6

我想知道第一次創建共享首選項文件的時間?何時首次創建共享首選項文件?

我有以下代碼:

<?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(),與文件名?我不知道是否必須首先創建該文件並將其放入應用程序的數據目錄中?

我的意思是什麼時候第一次創建共享首選項文件:當應用程序安裝,或一段時間後?如果以後,當?

回答

12

getSharedPreferences(name, mode)方法自動創建指定名稱的文件,因此您不需要創建它。其實,這個偏好文件的確切位置和名稱沒有記錄,所以我建議你在嘗試access this file directly時不要依賴一些約定,因爲將來可能會更改位置和名稱 - SharedPreferences應該是唯一的方法訪問此文件。

是當getSharedPreferences(name, mode)addPreferencesFromResource(preferencesResId)被稱爲首次創建了某個名字的首選項文件。

2

我不是100%確定你在說什麼。

您在處理PreferenceScreens或SharedPreferences時不需要創建任何文件。這由SharedPreferences在幕後處理。我相信這種情況發生在您首選設置首選項屏幕中的值時,但我確實不確定。

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

該代碼一旦設置好就會爲您的PreferenceScreen獲取SharedPreferences。如果它們尚未設置,則使用默認值。

+1

感謝它..我的意思何時是第一次創建共享首選項文件:當應用程序安裝, 或一段時間後?如果以後,當? – Smitha 2012-03-05 07:07:25

+0

我相信它是首次出現PreferenceScreen時創建的,或者PreferenceScreen中的項目是由用戶首先設置的。正如我之前所說,我對此並不完全確定。 – Knossos 2012-03-05 07:29:06

+0

是的..我認爲你是對的! – Smitha 2012-03-05 08:20:55

-4

您必須在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; 
} 
+0

這看起來好像跟這個問題沒有任何關係。 – 2015-04-08 17:04:05

0

的共享偏好將根據/data/data/appname/shared_prefs/prefs_name.xml

0

正如在其他意見所創建的,你永遠是與共享偏好文件直接進行交互。您使用SharedPreferences對象讀取和寫入值。 Context.getSharedPreferences()方法接受一個字符串作爲其第一個參數(要與之交互的共享首選項文件的名稱)並返回一個SharedPreferences對象。按照documentation for the getSharedPreferences() method:

如果此名稱的首選項文件不存在,它將被創建時,檢索編輯器(SharedPreferences.edit()),然後提交更改(Editor.commit())。

所以創建共享偏好文件時,這是。其他返回SharedPreferences對象的方法只是在不同的上下文中做同樣的事情。

例如:

Activity.getPreferences()方法

簡單地調用底層getSharedPreferences(字符串,整數)通過在該活性的類名傳遞作爲偏好名稱方法。