zoukankan      html  css  js  c++  java
  • Android的简单应用(一)——PreferenceFragment实现应用的设置

    今天主要讲解怎么使用PreferenceFragment。PreferenceFragment它与默认的SharedPreferences文件相连接,不需要你再自己写代码去操作SharedPreferences。这个是它最大的用处。

    一、类

    一个主Activity,用来存放fragment.

    一个PreferenceFragment。

    一个settings.xml里面存放设置的变量。

    二、具体代码

    activity的代码如下:

    public class MainActivity extends Activity{
    
    
        private SharedPreferences sp;
        private OnSharedPreferenceChangeListener listener;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            getFragmentManager().beginTransaction().replace(android.R.id.content, new ConfigFragment()).commit();//配置Fragment。
            sp = PreferenceManager.getDefaultSharedPreferences(this);//获取配置文件,方便我们查看数值的变化
            Log.d("CPACM",sp.getBoolean("autoBack", false)+ sp.getString("et1", "cpacm"));
            listener = new OnSharedPreferenceChangeListener(){//SharedPreferences的变化监听器
                
                @Override
                public void onSharedPreferenceChanged(
                        SharedPreferences sharedPreferences, String key) {
                    Log.d("CPACM","change");
                    // TODO Auto-generated method stub
                    Toast.makeText(MainActivity.this, key, Toast.LENGTH_LONG).show();//当SharedPreferences中的数值变化时,显示一个toast.
                }
                
            };
            sp.registerOnSharedPreferenceChangeListener(listener);
        }
        
    
    }

    注意:SharedPreferences一直在WeakHashMap保持监听。这意味着不能用匿名的内部类作为监听器,因为一旦你离开当前的范围它将变成回收的目标。它将首先工作,但是最终,仍然要被回收,被从WeakHashMap移除然后停止工作。在你的类中的一个位置引用一个监听器,这样就好了,提供你的类的实例也不会被销毁。

    PreferenceFragment代码如下:

    public class ConfigFragment extends PreferenceFragment{
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.settings);//传入配置文件,里面存放可设置的变量
        }
    }

    settings.xml文件

    <?xml version="1.0" encoding="utf-8"?>
    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    
        <CheckBoxPreference
            android:defaultValue="true"
            android:key="autoBack"
            android:summaryOff="关闭"
            android:summaryOn="开启"
            android:title="自动回复" />
    
        <PreferenceCategory android:title="SMS 助手" >
            <CheckBoxPreference
                android:defaultValue="false"
                android:key="smsSilence"
                android:summaryOff="关闭"
                android:summaryOn="开启"
                android:title="静音" />
    
            <PreferenceScreen android:title="更多选项" >
                <CheckBoxPreference
                    android:defaultValue="true"
                    android:key="cb21"
                    android:summaryOff="关闭"
                    android:summaryOn="开启"
                    android:title="功能1" />
                <CheckBoxPreference
                    android:defaultValue="true"
                    android:key="cb22"
                    android:summaryOff="停用"
                    android:summaryOn="使用"
                    android:title="功能2" />
    
                <ListPreference
                    android:dialogTitle="请选择论坛"
                    android:entries="@array/entries_list_preference"
                    android:entryValues="@array/entriesvalue_list_preference"
                    android:key="list1"
                    android:summary="开发论坛"
                    android:title="android forum" />
    
                <EditTextPreference
                    android:defaultValue="Hello EditTextPreference"
                    android:dialogTitle="输入设置"
                    android:key="et1"
                    android:summary="点击输入"
                    android:title="EditTextPreference Sample" />
            </PreferenceScreen>
        </PreferenceCategory>
        <PreferenceCategory android:title="其他选项" >
            <RingtonePreference
                android:key="rt1"
                android:summary="选择铃声"
                android:title="RingtonePreference Sample" />
        </PreferenceCategory>
    
    </PreferenceScreen>

    其中android:key,对应着SharedPreferences的key。

    arrays.xml中的值:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    
        <string-array name="entries_list_preference">
            <item>www.anddev.org</item>
            <item>www.eoeandroid.com</item>
            <item>developer.android.com</item>
        </string-array>
        <string-array name="entriesvalue_list_preference">
            <item>1</item>
            <item>2</item>
            <item>3</item>
        </string-array>
    
    </resources>
  • 相关阅读:
    【mysql报错】MySQL host is blocked because of many connection errors; 解决方法
    【mysql安装及配置主从】Linux中mysql5.7主从配置
    Linux中安装PostgreSQL-10.1
    文件系统概述
    CAN学习方法(知乎)
    十大排序C语言实现
    波长,频率,传播距离三者的关系
    NB-IOT无线帧结构和下行物理信道
    NB-IOT双工模式
    一文全面了解NB-IoT技术优势及特点
  • 原文地址:https://www.cnblogs.com/cpacm/p/4082958.html
Copyright © 2011-2022 走看看