标签:
View可以不通过xml进行设置,有代码直接进行设置,首选项preference也一样。下面是代码设置list preference的例子,是在通过header来指向PreferenceFragment的类,在PreferenceActivity中的实现也是类似的。
public class ListPreferenceFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.fightoptions);
// 通过key来获得prefrenence
ListPreference listpref = (ListPreference) findPreference("selected_flight_sort_option");
listpref.setEntries(new String[]{"Entry 1","Entry 2","Entry 3"});
listpref.setEntryValues(new String[]{"0","1","2"});
}
}
如果需要从创建PreferenceScreen开始,下面是例子:
public class ListPreferenceFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//创建PreferenceScreen
PreferenceScreen screen = getPreferenceManager().createPreferenceScreen( getActivity() );
//创建PreferenceCategory,并加入preference screen
PreferenceCategory inlinePrefCat = new PreferenceCategory(getActivity());
inlinePrefCat.setTitle("Hello");
screen.addPreference(inlinePrefCat);
//创建List preference,并加入preference category
ListPreference listpref = new ListPreference(getActivity());
listpref.setKey("my_list_pref");
listpref.setTitle("Code For list preference");
listpref.setSummary("完全用代码编写的首选项测试");
listpref.setEntries(new String[]{"Entry 1","Entry 2","Entry 3"});
listpref.setEntryValues(new String[]{"0","1","2"});
screen.addPreference(listpref);
// 将preference screen加入 preference fragment中
setPreferenceScreen(screen);
}
}
Preference的信息在设备中通过文件保存,我们可以利用这个特点来进行数据和状态的存贮,例如游戏的最高得分。下面的例子,利用preference存贮文件保存两个参数,“initialized”是boolean,表示应用是否第一次运行。“call_number”是个计数器,每次调用dataStore()方法就加一。
private final String INITIALIZER = "initialized";
private final String CALLNUM = "call_number";
private void dataStore(){
//等同于PreferenceManager.getDefaultSharedPreferences(this);或者通过getShearedPreferences(name,mode)来指定文件名,可以通过editor来写。除了MODE_PRIVATE外,还有MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE,这是用来创建preference是设置的权限。如果我们只限于本应用使用,可设置MODE_PRIVATE。
SharedPreferences prefs = getPreferences(MODE_PRIVATE);
boolean hasPreferences = prefs.getBoolean(INITIALIZER, false);
int num = prefs.getInt(CALLNUM, 0);
if(hasPreferences){
Log.d("PRO","We‘ve been called " + num + " times before. ");
}else{
Log.d("PRO","First time ever being called.");
}
//写入preference
Editor editor = prefs.edit();
editor.putBoolean(INITIALIZER, true);
num ++;
editor.putInt(CALLNUM, num);
editor.commit(); //或者editor.apply();
}
DialogPreference是EditTextPreference和ListPreference的基类,如果我们需要有自己的弹框效果,可以继承DialogPreference来自定制layout,点击触发处理,并在onDialogClose()中处理写preference文件。
本博文涉及的例子代码,可以在Pro Android学习:Preference(首选项)小例子中下载。
相关链接: 我的Android开发相关文章
【转】 Pro Android学习笔记(六三):Preferences(7):代码控制首选项
标签:
原文地址:http://www.cnblogs.com/blongfree/p/5048031.html