zoukankan      html  css  js  c++  java
  • 【转】 Pro Android学习笔记(六三):Preferences(7):代码控制首选项

    [-]

    1. 代码实现preference
    2. 利用preference保存状态
    3. DialogPreference

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

    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的信息在设备中通过文件保存,我们可以利用这个特点来进行数据和状态的存贮,例如游戏的最高得分。下面的例子,利用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(首选项)小例子中下载。

    相关链接: 我的Android开发相关文章

  • 相关阅读:
    DS博客作业02--栈和队列
    DS博客作业02--线性表
    c博客06-结构
    c博客作业05--指针
    C博客作业04--数组
    博客作业03-函数
    循环结构
    c博客作业01--分支、顺序结构
    我的第一篇博客
    Macos安装JDK1.8
  • 原文地址:https://www.cnblogs.com/blongfree/p/5048031.html
Copyright © 2011-2022 走看看