Android之PreferenceFragment的使用:

当我们在开发项目的时候,经常需要使用到选项设置。设置由用户选定,并通过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都是唯一的。

发布了14 篇原创文章 · 获赞 3 · 访问量 7553

猜你喜欢

转载自blog.csdn.net/Xu_1215/article/details/50597278
今日推荐