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:key="checkbox_preference" android:summary="This preference enables you to show/hide some elements of the UI" android:title="Enable some settings" /> android:key="edittext_preference" android:summary="An example that uses an edit text dialog" android:title="EditTextPreference" /> 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:key="checkbox_preference_2" android:summary="This preference will NOT work if CheckBoxPreference is disabled" android:title="Nested PreferenceScreen disabled?" /> android:summary="shows another screen of preferences" android:title="Screen preference" > 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: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 ``` 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/
我住长江头,君住长江尾。