您的位置:首页 > 移动开发 > Android开发

Android之PreferenceFragment的使用:

2016-01-27 23:27 447 查看
当我们在开发项目的时候,经常需要使用到选项设置。设置由用户选定,并通过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);
se
4000
tContentView(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都是唯一的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android