2012-03-05 60 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(字符串,整数)通过在该活性的类名传递作为偏好名称方法。