Android Preference API 用法--ListPreference(一)

一.ListPreference简介

我们都只知道SharedPreference非常适合于参数设置功能,在此处的preference 也是代表SharedPreference的意思,在SharedPreference中,我们可以迅速的将某些值保存进xml文件中,然后我们可以读取这些设置信息进行相应的操作。

为了简化与preference相关的应用开发,android为我们提供了一系列的api来帮助我们。主要有 PreferenceActivity,CheckBoxPreference,EditTextPreference,ListPreference,MultiSelectListPreference,Preference,PreferenceCategory,PreferenceScreen,RingtonePreference,SwitchPreference。使用接口不用自己手动的对数据进行保存,会自动根据你的选择项进行数据保存,实现自动保存的代码在addPreferencesFromResource方法中具体实现,但是此处不能自定义保存数据的xml文件的名字。xml文件存放的位置在data/data/你应用的包名/shared_prefs 文件夹下。在Eclipse中可以使用File Exceplorer查看文件。

二.ListPreference效果

1. 界面显示如下(类似于下拉框):

2. 点击之后会弹出一个对话框,对话框中显示可以选择的列表,实现单选。在选择之后对话框会自动关闭并会将选择项所对应的值保存到xml文件中。

三.ListPreference用法(首选项preferences)

1. 写xml文件

注意事项:

第一:位置。该文件的位置是在res/xml/下的。

第二:格式,PreferenceScreen为根标签,ListPreference为子标签

第三:标签属性含义

android:key 唯一标识符,和android:id相类似,PreferenceManager可以以其为参数通过findPreference获取指定的preference。

android:title 整个屏幕的标题。

android:summary 选项的简单说明。

android:entries 弹出的对话框中,列表显示的文本内容,注意,这里指定的是一个数组,res/values/arrays.xml为我们的list提供了初始化数据。

android:entryValues 与android:entries相对应的值,和android:entries一样。

android:defaultValue 当对应值不存在时的默认值。和android:entries一样。

android:dialogTitle 弹出的对话框中的标题信息。

xml文件代码如下:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:key="screen_list"
	android:title="标题"
	android:summary="说明摘要">

	<ListPreference
		android:key="myListPreference"
		android:title="标题"
		android:summary="说明摘要"
		android:entries="@array/list_entries"
		android:entryValues="@array/list_entries_value"
		android:dialogTitle="dialogTitle"
		android:defaultValue="@array/list_entries_value2">
	</ListPreference>

</PreferenceScreen>

arrays.xml文件如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
	<string-array name="list_entries">
		<item>山东</item>
		<item>福建</item>
		<item>北京</item>
		<item>河北</item>
	</string-array>
	<string-array name="list_entries_value">
		<item>shandong1</item>
		<item>fujian1</item>
		<item>beijing1</item>
		<item>hebei1</item>
	</string-array>
	<string-array name="list_entries_value2">
		<item>shandong2</item>
		<item>fujian2</item>
		<item>beijing2</item>
		<item>hebei2</item>
	</string-array>
</resources> 

2. 一个继承了PreferenceActivity和实现OnPreferenceChangeListener接口的Activity。

步骤:

第一:添加xml文件资源。addPreferencesFromResource(R.xml.mylistpreference);

第二:getPreferenceManager返回首选项管理器对象。

第三:根据android:key中指定的名称(相当于id)来获取首选项ListPreference对象。

第四:给ListPreference对象添加选择改变监听事件。

第五:实现OnPreferenceChangeListener中抽象方法。例如:当数据改变时将ListPreference的Summary值改成选择项对应的值,以方便查看。

代码如下:

public class MyPreferencesActivity extends PreferenceActivity implements OnPreferenceChangeListener{
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		addPreferencesFromResource(R.xml.mylistpreference);
		/**
		* getPreferenceManager返回首选项管理器对象
		*/
		PreferenceManager manager = getPreferenceManager();
		// 根据android:key中指定的名称(相当于id)来获取首选项
		ListPreference listPreference = (ListPreference) manager.findPreference("myListPreference");
		Log.i("存储的值为", ""+listPreference.getValue());
		listPreference.setOnPreferenceChangeListener(this);
	}

	@Override
	public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
			Preference preference) {
		return super.onPreferenceTreeClick(preferenceScreen, preference);
	}

	@Override
	public boolean onPreferenceChange(Preference preference, Object newValue) {
		preference.setSummary((String)newValue);
		return true;//返回true表示允许改变
	}
} 

四.参考网址

1. http://android.tgbus.com/Android/tutorial/201108/364068.shtml

2. http://www.cnblogs.com/kakafra/archive/2012/09/19/2694444.html

时间: 2024-10-10 09:54:04

Android Preference API 用法--ListPreference(一)的相关文章

Android Preference使用

Android Preference经常使用在例如设置的功能,Android提供preference这个键值对的方式来处理这种情况,自动保存这些数据,并立时生效,这种就是使用android sharedpreferences方式进行保存的,不需要我们手动来写,下面的图片就是使用Preference来进行保存的 添加一个简单的Preference 添加一个Preference很简单,首先看下图片 我们在res目录下添加一个xml目录,里面添加一个itchq文件,这个文件相当于我们的Preferen

Android之Fragment用法

本文翻译自Android developer网站上面,原文参考:Building a Dynamic UI with Fragments 当我们需要动态的多界面切换的时候,就需要将UI元素和Activity融合成一个模块.在2.3中我们一般通过各种Activity中进行跳转来实现多界面的跳转和单个界面动态改变.在4.0或以上系统中就可以使用新的特性来方便的达到这个效果--Fragment类.Fragment类似一个嵌套Activity,可以定义自己的layout和自己的生命周期. 多个Fragm

转:Android preference首选项框架

详解Android首选项框架ListPreference 探索首选项框架 在 深入探讨Android的首选项框架之前,首先构想一个需要使用首选项的场景,然后分析如何实现这一场景.假设你正在编写一个应用程序,它提供了一个搜索 飞机航班的工具.而且,假设该应用程序的默认设置是根据机票价格由低到高的顺序显示航班,但用户可以将首选项设置为始终根据最少停站数或特定航线来航班. 如何实现这一场景? ListPreference 显 然,必须为用户提供UI 来查看排序选项列表.该列表将包含每个选项的单选按钮,

android sdk api结构解析

一.系统级:android.accounts android.app     1.OS 相关         android.os         android.os.storage         android.hardware(传感器)         android.security         android.drm(这个应该是为所有app服务的)     2.VM 相关         dalvik.system         dalvik.bytecode 二.程序框架  

android Preference Screen布局

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

Android WIFI 简单用法

随着Wifi的普及,在开发App的时候对wifi的考虑越来越多了.例如程序的升级在wifi下可以省很多流量,在通信软件中的视频通话.可以实现高画质的传输等等,Android提供了WifiManager类来帮助开发者们管理Wifi.下面就简单来说一下WifiManager的简单用法把. 权限: 为了使用WfiManager 我们需要在Androidmanifest.xml 加入权限: //本例中使用了前两个.具体请按照需要添加权限. <uses-permission android:name=&quo

自定义 Android Preference——SpinnerPreference的私人定制

因客户需求SpinnerPreference,网上各种搜索不到,无奈只能重写组件,现将过程分享大家. 自定义SpinnerPreference 一:首先从扩展preference开始:类文件必须继承自Preference并实现构造函数,如下 public MySpinnerPreference(Context context) { super(context); } public MySpinnerPreference(Context context, AttributeSet attrs) {

Android multipartentity的用法

最近写一个程序,android手机端上传多个图片到asp.net服务器端,使用httpclient,在网上查到了使用multipartentity.上传测试时总是出现(500)Internal Server Error,最后查出原来是文件大小超出了服务器限制,在项目的web.config中添加: <system.web> <HttpRuntime maxRequestLength="409600"  executionTimeout="60" /&

使用Android中API建议的方式实现SQLite数据库的增、删、改、查的操作

package com.examp.use_SQLite.dao; import java.util.ArrayList; import java.util.List; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import com.examp