zoukankan      html  css  js  c++  java
  • PreferenceFragment 使用 小结

           Perference也就是我们常说的偏好设置,首选项设置,可以自动保存一些数据,例如我们在上一次使用的时候的一些内容,则在下一次启动后依然生效,而不需要再进行配置。当用户改变设置时,系统就会更新SharedPreference文件中对应的值。perference使用键值对的方式来处理,在android3.0之前,我们一般去继承Preference这个基类,去给用户呈现一个可以设置的界面,其中的layout需要自己编写,而在3.0之后,使用的是碎片技术的首选项配置方法,即 使用PreferenceFragement来实现。

    +++++++++++++++++++++++++++++++++++=

    为了从一个XML文件中获取界面,使用addPreferenceFromResource(int)方法。根元素应该使用PreferenceScreen在层次结构中随后的PreferenceScreen将导致屏幕分割处。

     

    为了指定一个意图来查询都带有各自首选项的activitiy,使用addPreferenceFromIntent方法。每个activity可以在manifest文件中指定meta-data来指向一个XML文件资源。这些资源文件将被填充到单独的首选项层次结构并且通过这个fragment来展示。

     

    为了指定一个以PreferenceScreen为根元素的对象,使用setPreferenceScreen(PreferenceScreen)方法。

    +++++++++++++++++++++++

    方便起见,这个fragment实现了一个用于当前层次结构中任意首选项的点击事件监听器,

    onPreferenceTreeClick(PreferenceScreen,Preference).


    ----------------------------------------------------------------------------------------------------------------------------------------

        使用PreferenceFragment 的一个例子,效果与之前使用继承PreferenceActivity差不多,步骤如下:

    1.创建一个工程,在MainAcitivity中 添加菜单按钮 及 对应效果

    ------------------------------  cut here  -----------------------------------

        package com.example.fragementexam;  
          
        import android.os.Bundle;  
        import android.view.Menu;  
        import android.view.MenuItem;  
        import android.app.Activity;  
        import android.content.Intent;  
          
        public class MainActivity extends Activity {  
              
            private static final int menu_setting = 1;  
          
            @Override  
            protected void onCreate(Bundle savedInstanceState) {  
                super.onCreate(savedInstanceState);  
                setContentView(R.layout.main);  
            }  
              
            @Override  
            public boolean onCreateOptionsMenu(Menu menu) {  
                // TODO Auto-generated method stub  
                menu.add(0,menu_setting,1,"设置").setIcon(android.R.drawable.ic_menu_preferences);  
                return super.onCreateOptionsMenu(menu);  
            }  
              
            @Override  
            public boolean onOptionsItemSelected(MenuItem item) {  
                // TODO Auto-generated method stub  
                super.onOptionsItemSelected(item);  
                Intent intent = new Intent(this, FragmentPreferences.class);  
                startActivity(intent);  
                return false;  
            }  
          
        } 
     ------------------------------  cut here  -----------------------------------

    2.在res文件夹下面新建一个xml文件夹,在里面新建一个preferences.xml文件

    ------------------------------  cut here  -----------------------------------
        <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >  
          
            <PreferenceCategory android:title="In-line preferences" >  
                <CheckBoxPreference  
                    android:key="checkbox_preference"  
                    android:summary="这是一个复选框"  
                    android:title="复选框设置" />  
            </PreferenceCategory>  
            
            <PreferenceCategory android:title="Dialog-based preferences" >  
                <EditTextPreference  
                    android:dialogTitle="请输入你最喜欢的种族"  
                    android:key="edittext_preference"  
                    android:summary="一个使用了编辑文本对话框的例子"  
                    android:title="请输入你最喜欢的种族" />  
          
                <ListPreference  
                    android:dialogTitle="请选择一项"  
                    android:entries="@array/cities"  
                    android:entryValues="@array/airport_codes"  
                    android:key="list_preferenc"  
                    android:summary="一个使用了列表对话框的例子"  
                    android:title="请选择一项" />  
            </PreferenceCategory>  
            
            <PreferenceCategory android:title="Launch preferences" >   
                <!-- This PreferenceScreen tag serves as a screen break (similar to page break in word processing). Like for other preference types, we assign a key here so it is able to save and restore its instance state. -->  
                <PreferenceScreen  
                    android:key="screen_preference"  
                    android:summary="展示另一个首选项配置页面"  
                    android:title="页面首选项" >   
                    <!-- 你可以在这里放置更多的首选项内容,将被在下一个页面呈现出来 -->  
                    <CheckBoxPreference  
                        android:key="next_screen_checkbox_preference"  
                        android:summary="在另一个页面展示但出于同一个层级的首选项配置"  
                        android:title="复选框设置" />  
                </PreferenceScreen>  
                <PreferenceScreen  
                    android:summary="从一个意图中启动一个activity"  
                    android:title="意图首选项" >  
                    <intent  
                        android:action="android.intent.action.VIEW"  
                        android:data="http://www.baidu.com" />  
                </PreferenceScreen>  
            </PreferenceCategory>  
            
            <PreferenceCategory android:title="Preference attributes" >  
                <CheckBoxPreference  
                    android:key="parent_checkbox_preference"  
                    android:summary="这是一个可见的父类"  
                    android:title="父类复选框首选项" />  
                <!-- 子类的可见类型是由样式属性定义的 -->  
                <CheckBoxPreference  
                    android:dependency="parent_checkbox_preference"  
                    android:key="child_checkbox_preference"  
                    android:layout="?android:attr/preferenceLayoutChild"  
                    android:summary="这是一个可见的子类"  
                    android:title="子类复选框首选项" />  
            </PreferenceCategory>  
          
        </PreferenceScreen>  

     

     ------------------------------  cut here  -----------------------------------

    3、FragmentPreferences.java的代码部分

     ------------------------------  cut here  -----------------------------------

        package com.example.fragementexam;  
          
        import android.app.Activity;  
        import android.os.Bundle;  
        import android.preference.PreferenceFragment;  
          
        public class FragmentPreferences extends Activity {  
            @Override  
            protected void onCreate(Bundle savedInstanceState) {  
                // TODO Auto-generated method stub  
                super.onCreate(savedInstanceState);  
                getFragmentManager().beginTransaction().replace(android.R.id.content, new PrefsFragement()).commit();  
            }  
              
              
            public static class PrefsFragement extends PreferenceFragment{  
                @Override  
                public void onCreate(Bundle savedInstanceState) {  
                    // TODO Auto-generated method stub  
                    super.onCreate(savedInstanceState);  
                    addPreferencesFromResource(R.xml.preferences);  
                }  
            }  
        }  
     ------------------------------  cut here  -----------------------------------


    大致对PreferenceFragment的学习使用就是这样,以后在高版本上面开发的时候可以考虑这种方式





  • 相关阅读:
    【PAT甲级】1043 Is It a Binary Search Tree (25 分)(判断是否为BST的先序遍历并输出后序遍历)
    Educational Codeforces Round 73 (Rated for Div. 2)F(线段树,扫描线)
    【PAT甲级】1042 Shuffling Machine (20 分)
    【PAT甲级】1041 Be Unique (20 分)(多重集)
    【PAT甲级】1040 Longest Symmetric String (25 分)(cin.getline(s,1007))
    【PAT甲级】1039 Course List for Student (25 分)(vector嵌套于map,段错误原因未知)
    Codeforces Round #588 (Div. 2)E(DFS,思维,__gcd,树)
    2017-3-9 SQL server 数据库
    2017-3-8 学生信息展示习题
    2017-3-5 C#基础 函数--递归
  • 原文地址:https://www.cnblogs.com/liulaolaiu/p/11744709.html
Copyright © 2011-2022 走看看