android老知识,我只是忘记了__PreferenceActivity的应用

学了新东西,就忘了新的东西,最近一个页面用的就是设置界面,继承的是PreferenceActivity,好久没用,都不知道他们写的什么了,现在写个dome记录一下。
PreferenceActivity看名有一半就是Preference有关的,而android保存常用简单参数都会用到sharePreference,对的这个PreferenceActivity就是用来保存用户输入的参数的。使用sharePreference我们还要getEditor(),commit()。这货你直接画个界面,剩下的啥都不用管了。如下图:

这里写图片描述

你改变数据之后,出来再进去,发现数据还是上次的那样,比较牛逼了,对于一般的设置界面,还是比较好的啊。
看看Activity吧:

public class SecondActivity extends PreferenceActivity{

    ListPreference name ;
    ListPreference city ;

    EditTextPreference input_key ;
    MultiSelectListPreference multi_list ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.second_preference);

        name = (ListPreference) findPreference("name");
        name.setSummary(name.getValue());
        name.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {
                name.setSummary(name.getValue());

                //返回true,表示name中保存的数据会更新
                return true;
            }
        });

        city = (ListPreference) findPreference("city");
        city.setSummary(city.getValue());
        city.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {
                city.setSummary(city.getValue());
                return true ;
            }
        });

        input_key = (EditTextPreference) findPreference("input_key");
        input_key.setSummary(input_key.getText().toString());
        input_key.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {
                input_key.setSummary(newValue.toString());

                return true;
            }
        });

        multi_list = (MultiSelectListPreference) findPreference("multi_list");
        multi_list.setSummary(multi_list.getValues().toString());
        multi_list.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {
                multi_list.setSummary(newValue.toString());
                return true ;
            }
        });

    }
}

这里没有啥setContentView了,存在一个 addPreferencesFromResource(R.xml.second_preference);second_preference是res资源文件夹下的一个xml文件夹的文件:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

   <!--list列表-->
    <PreferenceCategory android:title="选择">
        <ListPreference
            android:summary="tom"
            android:defaultValue="1"
            android:dialogTitle="名称选择"
            android:entries="@array/name_choose"
            android:entryValues="@array/name_value"
            android:key="name"
            android:title="名称选择"/>

        <ListPreference
            android:summary="武汉"
            android:defaultValue="3"
            android:dialogTitle="城市选择"
            android:entries="@array/city_name"
            android:entryValues="@array/city_value"
            android:key="city"
            android:title="城市选择"/>
    </PreferenceCategory>

    <CheckBoxPreference
        android:defaultValue="1"
        android:key="sex"
        android:summary="this is the inner text"
        android:title="性别">
    </CheckBoxPreference>

    <EditTextPreference
        android:key="input_key"
        android:summary="{text}"
        android:text="zhangsan"
        android:title="editText"/>

    <MultiSelectListPreference
        android:entries="@array/city_name"
        android:entryValues="@array/city_value"
        android:key="multi_list"
        android:summary="multi choose"
        android:title="multi_list"/>

    <PreferenceCategory android:title="高级">

        <PreferenceScreen android:title="关于">
            <intent android:targetClass="com.testpreferences.MainActivity"/>
        </PreferenceScreen>

    </PreferenceCategory>

</PreferenceScreen>

arrays.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string-array name="name_choose" >
        <item>tom</item>
        <item>steven</item>
        <item>jerry</item>
    </string-array>

    <string-array name="name_value" >
        <item>1</item>
        <item>2</item>
        <item>3</item>
    </string-array>

    <string-array name="city_name" >
        <item>武汉</item>
        <item>上海</item>
        <item>北京</item>
        <item>深圳</item>
    </string-array>

    <string-array name="city_value">
        <item>1</item>
        <item>2</item>
        <item>3</item>
        <item>4</item>
    </string-array>

</resources>

具体的代码就这样,也挺简单,结合dome基本上能懂summary,defaultValue,dialogTitle,entries,entryValues,key(相当于id的作用,你都看到了findPreference啦。)
最后代码了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值