Android数据存储方法---PreferenceFragment详解

Android数据存储是移动开发中一个必须掌握的基础知识,Android系统提供了多种数据存储的方式,如SharedPreferences、SQLite、ContentProvider等,其中SharedPreferences是一种轻量级的数据存储方式,适合存储简单的数据,例如用户的配置信息、应用程序的一些状态等。SharedPreferences是一种基于键值对的存储方式,可以保存基本数据类型和String类型的值。

而PreferenceFragment是Android系统为方便应用程序开发提供的一个片段组件,主要用于处理用户偏好设置,在Android应用程序中非常常见。PreferenceFragment允许应用程序开发者使用简单的xml文件定义偏好设置,能够快速灵活地构建用户界面。

下面我们来详细介绍一下PreferenceFragment的使用方法和案例说明。

使用方法

1. 创建PreferenceFragment子类

首先,我们需要创建一个PreferenceFragment类,该类的作用是处理用户偏好设置。PreferenceFragment 是fragment的子类,内部封装了 PreferenceScreen对象。可以按照以下代码创建PreferenceFragment:

```java

public class MyPreferenceFragment extends PreferenceFragment {

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

// 从xml文件中添加Preferences

addPreferencesFromResource(R.xml.preference_settings);

}

}

```

2. 创建xml文件

我们需要在项目的res/xml文件夹下创建一个xml文件,该文件定义应用程序的用户偏好设置。例如我们创建一个preference_settings.xml文件,该文件代码如下:

```xml

android:defaultValue="false"

android:key="checkbox_preference"

android:summary="This preference enables you to show/hide some elements of the UI"

android:title="Enable some settings" />

android:defaultValue="Hello World"

android:key="edittext_preference"

android:summary="An example that uses an edit text dialog"

android:title="EditTextPreference" />

android:defaultValue="1"

android:entries="@array/list_preference_entries"

android:entryValues="@array/list_preference_values"

android:key="list_preference"

android:summary="An example that uses a list dialog"

android:title="ListPreference" />

android:defaultValue="false"

android:key="checkbox_preference_2"

android:summary="This preference will NOT work if CheckBoxPreference is disabled"

android:title="Nested PreferenceScreen disabled?" />

android:key="screen_preference"

android:summary="shows another screen of preferences"

android:title="Screen preference" >

android:defaultValue="true"

android:key="checkbox_preference_3"

android:title="Toggle preference" />

```

3. 将PreferenceFragment添加到Activity中

最后,在我们的Activity中通过add方法将PreferenceFragment添加到Activity中。MainActivity的代码如下:

```java

public class MainActivity extends AppCompatActivity {

private static final String TAG = "MainActivity";

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

getFragmentManager().beginTransaction().replace(R.id.settings_container, new MyPreferenceFragment()).commit();

}

}

```

4. 运行效果

最后,我们运行一下程序,效果如下:

![picture](https://img-blog.csdn.net/20160325142428704)

案例说明

以上是PreferenceFragment的基本使用方法,下面我们来演示一个简单的例子。

例如,我们需要设置用户的字体大小,我们可以通过以下步骤来实现:

1. 在xml文件中添加ListPreference,代码如下:

```xml

android:defaultValue="1"

android:entries="@array/font_size"

android:entryValues="@array/font_size_values"

android:key="font_size"

android:title="字体大小"

/>

```

其中,font_size是属性名,数组@array/font_size和@array/font_size_values如下:

```xml

1

2

3

```

2. 我们需要监听字体大小的变化,在我们的MainActivity中添加如下代码:

```java

private SharedPreferences sharedPreferences;

private SharedPreferences.OnSharedPreferenceChangeListener listener;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

// 添加Fragment

getFragmentManager().beginTransaction().replace(R.id.settings_container, new MyPreferenceFragment()).commit();

//获取SharedPreferences实例

sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);

//设置监听器

listener = new SharedPreferences.OnSharedPreferenceChangeListener() {

@Override

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {

Log.i(TAG, "onSharedPreferenceChanged: "+key);

// 如果key等于font_size

if(key.equals("font_size")){

// 获取当前的字体大小

String fontSize = sharedPreferences.getString(key, "1");

Log.i(TAG, "onSharedPreferenceChanged: "+fontSize);

// 根据字体大小更新TextView的字体大小

if(mTextView!=null){

if(fontSize.equals("3")){

mTextView.setTextSize(24);

}else if(fontSize.equals("2")){

mTextView.setTextSize(18);

}else{

mTextView.setTextSize(14);

}

}

}

}

};

// 注册监听器

sharedPreferences.registerOnSharedPreferenceChangeListener(listener);

}

```

上述代码中,我们首先获取SharedPreferences实例,通过registerOnSharedPreferenceChangeListener方法注册监听器,监听字体大小的变化,从而更新TextView的字体大小。

3. 最后,在MainActivity.java中的onStop()方法中删除SharedPreferences监听器,并在Activity销毁时判断是否需要保存数据,代码如下:

```java

@Override

protected void onStop() {

super.onStop();

// 删除监听器

sharedPreferences.unregisterOnSharedPreferenceChangeListener(listener);

// 应用程序即将退出时保存数据

SharedPreferences.Editor editor = sharedPreferences.edit();

editor.putString("text",mTextView.getText().toString());

editor.commit();

}

```

上述代码中,我们在Activity即将销毁时,通过SharedPreferences.Editor的putString方法保存TextView的文本信息。

最后,我们的效果如下:

![picture](https://img-blog.csdn.net/20160325154018042)

总结

通过上述案例,我们可以看出,PreferenceFragment的使用非常简单,只需要定义一个xml文件,然后通过add方法将PreferenceFragment添加到Activity中。而SharedPreferences不仅适用于PreferenceFragment的开发,还适用于其他存储简单数据的场合。

总之,对于Android开发者来说,熟练掌握SharedPreferences和PreferenceFragment的使用是非常有必要的。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/

点赞(117) 打赏

评论列表 共有 1 条评论

一齐牵手去旅行 1年前 回复TA

我住长江头,君住长江尾。

立即
投稿
发表
评论
返回
顶部