Android之PreferenceFragment的使用:

来源:互联网 发布:淘宝上新速度 编辑:程序博客网 时间:2024/04/30 20:23

当我们在开发项目的时候,经常需要使用到选项设置。设置由用户选定,并通过Preference保存。Android提供了这样一个便捷的基类PreferenceFragment。

简单步骤:
1.创建xml文件

<?xml version="1.0" encoding="utf-8"?><PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >    <PreferenceCategory           android:summary="firstsummary"        android:title="firstlist" >        <CheckBoxPreference            android:key="checkbox"            android:summaryOff="已经关闭"            android:summaryOn="已经开启"            android:title="是否开启" />        <ListPreference            android:entries="@array/entries"            android:entryValues="@array/values"            android:key="list"            android:summary="请点击选择"            android:title="选择一个选项" />        <EditTextPreference            android:dialogMessage="有劳了"            android:dialogTitle="请输入你的名字"            android:key="text"            android:summary="请在此输入"            android:title="请输入" />    </PreferenceCategory>    <PreferenceScreen        android:summary="lalala"        android:title="secondlist" >        <EditTextPreference            android:dialogMessage="请在下面输入"            android:dialogTitle="请输入你的名字"            android:key="text"            android:summary="请在此输入"            android:title="请输入" />    </PreferenceScreen></PreferenceScreen>

PreferenceScreen为根标签,ListPreference为子标签。ListPreference的常见属性如下:android:key 唯一标识符,和android:id相类似,可以以其为参数通过findPreference获取指定的preference 。 注意,这个android:key的值也是Preference文件里面的XML“键“名 。

android:title 大标题
android:summary 标题下面的小字(这个要作为选项卡才有)
android:entries 弹出的对话框中,列表显示的文本内容,需要指定的是一个数组。
android:entryValues 与android:entries相对应的值
android:defaultValue 当对应值不存在时的默认值
android:dialogTitle 弹出的对话框中的标题信息

注意点:
android:entries和android:entryValues数组的创建:
在values文件夹中创建:

<?xml version="1.0" encoding="utf-8"?><resources>    <string-array name="entries">        <item>Java</item>        <item>Swift</item>        <item>C#</item>    </string-array>    <string-array name="values">        <item>Eclipse</item>        <item>Xcode</item>        <item>Visual Studio</item>    </string-array></resources>

2.PreferenceFragment
新建MyPreferenceFragment,继承于PreferenceFragment,并加载选项设置的布局文件:

public class MyPreferenceFragment extends PreferenceFragment {    private CheckBoxPreference checkBoxPreference;    private EditTextPreference editTextPreference;    private ListPreference listPreference;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        addPreferencesFromResource(R.xml.myperference);        checkBoxPreference = (CheckBoxPreference)findPreference("checkbox");        editTextPreference = (EditTextPreference) findPreference("text");        listPreference = (ListPreference) findPreference("list");    }}

在MainActivity.java中加载上面的Fragment:

public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);‘        FragmentManager manager = getFragmentManager();        FragmentTransaction transaction = manager.beginTransaction();        MyPreferenceFragment fragment = new MyPreferenceFragment();        transaction.add(R.id.container, fragment);        transaction.commit();    }}

3.监听事件onPreferenceTreeClick()方法:

    @Override    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,            Preference preference) {        // TODO Auto-generated method stub        if ("checkbox".equals(preference.getKey())) {            Log.i("checkbox", "lalalal");        }        return super.onPreferenceTreeClick(preferenceScreen, preference);    }

当任何一个preference控件被点击,都将触发该方法。但是可以通过preference.getKey()这个方法找到具体是哪个preference被点击了,因为每个preference的key都是唯一的。

0 0
原创粉丝点击