0
点赞
收藏
分享

微信扫一扫

Pro Android学习笔记(六三):Preferences(7):代码控制首选项


代码实现preference

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开始,下面是例子:

Pro Android学习笔记(六三):Preferences(7):代码控制首选项_首选项

public class ListPreferenceFragment extends PreferenceFragment {
    @Override 
     public void onCreate(Bundle savedInstanceState) { 
         super.onCreate(savedInstanceState); 
         //创建PreferenceScreen 
         PreferenceScreen screen = getPreferenceManager().createPreferenceScreen( getActivity() );
         //创建PreferenceCategory,并加入preference screen 
         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的信息在设备中通过文件保存,我们可以利用这个特点来进行数据和状态的存贮,例如游戏的最高得分。下面的例子,利用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

DialogPreference是EditTextPreference和ListPreference的基类,如果我们需要有自己的弹框效果,可以继承DialogPreference来自定制layout,点击触发处理,并在onDialogClose()中处理写preference文件。

本博文涉及的例子代码,可以在Pro Android学习:Preference(首选项)小例子中下载。


举报

相关推荐

0 条评论